C# 尝试将结构作为对象传递给迭代字段和值的方法时遇到问题
在感激地借用了其他各种帖子之后,我很好地做到了:C# 尝试将结构作为对象传递给迭代字段和值的方法时遇到问题,c#,C#,在感激地借用了其他各种帖子之后,我很好地做到了: public string ShowCandle01(ref TYPE_Candle01 Candle) { string S = ""; foreach (var field in typeof(TYPE_Candle01).GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags
public string ShowCandle01(ref TYPE_Candle01 Candle)
{
string S = "";
foreach (var field in typeof(TYPE_Candle01).GetFields(BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public))
{
S = S + field.Name + ": " + field.GetValue(Candle).ToString() + "\n";
}
return S;
}
但我真正想要的是一个方法,它将迭代任何结构的实例,而不明确知道其名称,如:
公共字符串ShowAnyStruct(引用对象)
我似乎做不到。提前感谢您的先进智慧 我认为您需要的是一种通用方法:
public string ShowAnyStruct<TStruct>(TStruct val) where TStruct: struct
{
string s = "";
foreach (var field in typeof(TStruct).GetFields(BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public))
{
s += field.Name + ": " + field.GetValue(Candle).ToString() + "\n";
}
return s;
}
公共字符串ShowAnyStruct(TStruct val),其中TStruct:struct
{
字符串s=“”;
foreach(typeof中的var字段(TStruct).GetFields(BindingFlags.Instance|
BindingFlags.NonPublic|
(公众)
{
s+=field.Name+“:“+field.GetValue(Candle.ToString()+”\n”;
}
返回s;
}
当然,没有任何理由将其限制为结构,因此,如果删除该约束,也可以将其用于引用类型。我认为您需要的是一个通用方法:
public string ShowAnyStruct<TStruct>(TStruct val) where TStruct: struct
{
string s = "";
foreach (var field in typeof(TStruct).GetFields(BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public))
{
s += field.Name + ": " + field.GetValue(Candle).ToString() + "\n";
}
return s;
}
公共字符串ShowAnyStruct(TStruct val),其中TStruct:struct
{
字符串s=“”;
foreach(typeof中的var字段(TStruct).GetFields(BindingFlags.Instance|
BindingFlags.NonPublic|
(公众)
{
s+=field.Name+“:“+field.GetValue(Candle.ToString()+”\n”;
}
返回s;
}
当然,没有任何理由将此限制为结构,因此如果删除此约束,也可以将其用于引用类型。您可以尝试
whatever.GetType().GetFields ....
你可以试试
whatever.GetType().GetFields ....
为什么在这里使用
ref
?另外,当你说struct时,你是指实际的struct
还是任何对象?为什么在这里使用ref
?另外,当你说struct时,你是指一个实际的struct
还是任何对象?使用object
也会将struct
框起来,这在性能方面不是很好。。。(我没有投反对票)@Fabjan为什么这很重要?@AsadSaeeduddin为什么没有必要使用boxstruct
toobject
?@Fabjan我怀疑如果使用反射,拳击是否会带来任何真正的性能差异。@Fabjan很好,一个优点可能是相同的函数适用于所有类
和结构
s,而不需要为不同的参数类型实例化不同的泛型函数。使用对象
也将框结构
,这在性能方面不是很好。。。(我没有投反对票)@Fabjan为什么这很重要?@AsadSaeeduddin为什么没有必要使用boxstruct
toobject
?@Fabjan我怀疑如果使用反射,拳击是否会带来任何真正的性能差异。@Fabjan很好,一个优点是相同的函数适用于所有class
es和struct
s,而不需要为不同的参数类型实例化不同的泛型函数。