我的班级有一堆可以为空的双重属性。在运行时,其中一些值为0,我将在发送操作之前将它们设置为null。我知道我们可以使用foreach语句迭代已放置在类中的集合,所以我希望对此问题使用相同的技术。正如我在这种情况下所说,我不是在处理一个集合 实现IEnumerable是一种毫无意义的想法。 有什么方法可以在班级成员之间移动吗?
我试过这个
Class1 c=new Class1(){Age = 12,Family = "JR",Name = "MAX"};
foreach (string member in c)
{
Console.WriteLine(member);
}
Console.ReadKey();
实施IEnumerable
public IEnumerator GetEnumerator()
{
// ?!
}
答案 0 :(得分:2)
您必须使用Reflection,请查看
How to get the list of properties of a class?
我添加了一个新的双?你班上的财产。
class Class1
{
public int Age { get; set; }
public string Family { get; set; }
public string Name { get; set; }
public double? d { get; set; }
}
[Test]
public void MyTest()
{
Class1 c = new Class1() { Age = 12, Family = "JR", Name = "MAX" };
foreach (var prop in c.GetType().GetProperties().Where(x => x.PropertyType == typeof(double?)))
{
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(c));
prop.SetValue(c, (double?)null); // set null as you wanted
}
}
答案 1 :(得分:2)
您可以使用 Reflection 和 Linq 来实现此目标
cheeseQuestion.text = "What kind of cheese do you like?"
测试
using System.Reflection;
...
private static void ApplyNullsForZeroes(Object value) {
if (null == value)
return; // Or throw exception
var props = value.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.CanRead && p.CanWrite)
.Where(p => p.PropertyType == typeof(Nullable<Double>));
foreach (var p in props)
if (Object.Equals(p.GetValue(value), 0.0))
p.SetValue(value, null);
}
答案 2 :(得分:0)
正如您所说,您拥有属性,那么为什么不将它们用作Property
?
在get
中使用条件。获取属性值时返回null
:
get
{
return Age == 0 ? null : Age; //supposing "Age" is double in case to show an example
}