gpt4 book ai didi

c# - 使用 Typeof 在循环中进行转换

转载 作者:行者123 更新时间:2023-11-30 20:33:08 26 4
gpt4 key购买 nike

我将作为参数传递的 2 个对象的类型存储在一个数组中。我试图将它们循环播放,但它似乎不起作用。
我注意到当我调试对象类型的值(由 key.GetType() 返回)时,它显示 Name=RunTimeType FullName=System.RuntimeType 而不是预期的 Name=Label.
我不确定我做错了什么。有什么建议吗?

public static void GetUserGUIDandSID(string username, Object b, Object c) { 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain,
"domainName.com");
UserPrincipal user = (UserPrincipal.FindByIdentity(ctx, username));
var empIdNum = user.Guid.Value;
var empSID = user.Sid.Value;

List<object> types = new List<object>();
types.Add(b.GetType());
types.Add(c.GetType());

foreach(var key in types) {
if (key.GetType() == typeof(Label)) {
((Label)b).FontSize = 10;
((Label)b).Content = empIdNum;
}
if (key.GetType() == typeof(TextBox)) {
((TextBox)b).FontSize = 10;
((TextBox)b).Text = empIdNum.ToString();
}
if (key.GetType() == typeof(TextBlock)) {
((TextBlock)b).FontSize = 10;
((TextBlock)b).Text = empIdNum.ToString();
}
}
}

最佳答案

您可以使用 is 运算符直接检查每个对象的类型:

public static void GetUserGUIDandSID(string username, object b, object c)
{
...

foreach (var o in new object[] { b, c })
{
if (o is Label)
{
((Label)o).FontSize = 10;
((Label)o).Content = empIdNum;
}
else if (o is TextBox)
{
((TextBox)o).FontSize = 10;
((TextBox)o).Text = empIdNum.ToString();
}
else if (o is TextBlock)
{
((TextBlock)o).FontSize = 10;
((TextBlock)o).Text = empIdNum.ToString();
}
}
}

此外,您可以通过声明一个 params object[] 参数让该方法接受任意数量的对象:

public static void GetUserGUIDandSID(string username, params object[] objects)
{
...

foreach (var o in objects)
{
...
}
}

您现在可以使用不同数量的对象参数来调用它,例如

GetUserGUIDandSID("user", a);
GetUserGUIDandSID("user", a, b);
GetUserGUIDandSID("user", a, b, c);

关于c# - 使用 Typeof 在循环中进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com