【发布时间】:2019-07-30 14:23:42
【问题描述】:
我正在尝试找到一种方法来获取类的属性并将其与另一个变量一起传递给方法,以根据条件更新属性。例如
班级
public class MyClass{
public string? Prop1 { get; set; }
public string? Prop2 { get; set; }
public bool? Prop3 { get; set; }
public DateTime? Prop4 { get; set; }
... etc...
}
我想开始工作的测试代码...:
var obj = new MyClass();
MyCheckMethod(ref obj.Prop1, someCollection[0,1]);
在方法中:
private void MyCheckMethod(ref Object obj, string value)
{
if (!string.isnullorempty(value))
{
// data conversion may be needed here depending on data type of the property
obj = value;
}
}
我希望能够传递任何类的任何属性并仅在验证方法中传递的值后更新该属性。我希望我可以用泛型来做到这一点,但我还没有找到这样做的方法。或者,如果我把需要做的事情复杂化了。
问题在于对传入值的验证可能不仅仅是简单的 isnullorempy 检查。
我也想过做这样的事情:
private void MyCheckMethod(ref object obj, Action action)
然后我可以这样做:
...
MyCheckMethod(ref obj.Prop1, (somecollection[0,1]) => {
... etc....
})
所以我正在寻找一些关于如何进行的指导。
更新信息:
传入的数据都是字符串格式(这是第 3 方供应商提供数据的方式)。数据是通过 API 调用提供给第三方产品的……他们 SDK 的一部分。但是在我的课堂上,我需要有正确的数据类型。将字符串值转换为 datetime 用于日期,将字符串值转换为 int 用于 int 数据类型等...。另一个需要注意的是,如果数据类型没有有效值,则属性的默认值应为 NULL。
其他信息:
传入的数据始终为字符串格式。
例如:
我必须更新一个布尔属性。
传入值为“”。我测试看看字符串 Value 是否为 NullOrEmpty。所以我不会对财产做任何事情。
下一个属性数据类型是十进制。 传入值为“0.343”。 我测试以查看字符串值是否为 NullorEmpty。不是这样,一旦我进行转换等,我就可以更新属性......
希望这会有所帮助。
谢谢
【问题讨论】:
-
能否将整个对象
obj直接传递给方法MyCheckMethod? -
-
@YeldarKurmangaliyev - 问题是我只需要在值有效时更新属性,如果需要,然后转换为适当的数据类型。该属性需要保持为空,直到有一个有效值。另外,我有 100 多个属性,所以我试图消除任何臃肿的编码。
-
价值从何而来?很有可能已经有一个工具可以完成您需要做的事情。
-
什么决定了一个值是否有效,以及传入数据的类型是什么——它是对象、字符串还是其他什么?解决此问题的一种方法是更详细地描述预期用途。我认为许多答案(包括我的)都专注于从字面上回答您的问题,但我敢打赌有更好的方法。
标签: c#