Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在一行中调用prop.setValue吗?_C#_Enums - Fatal编程技术网

C# 我可以在一行中调用prop.setValue吗?

C# 我可以在一行中调用prop.setValue吗?,c#,enums,C#,Enums,是否可以在一行中调用此“setvalue()”方法 var genderProp = inj.GetType().GetProperty("gender"); genderProp.SetValue(inj, Enum.Parse(genderProp.PropertyType, "Male"), null); 您可以执行以下操作,但不确定它如何有助于提高代码的可读性 inj.GetType().GetProperty("gender").SetValue(inj, Enum.Parse(in

是否可以在一行中调用此“setvalue()”方法

var genderProp = inj.GetType().GetProperty("gender");
genderProp.SetValue(inj, Enum.Parse(genderProp.PropertyType, "Male"), null);

您可以执行以下操作,但不确定它如何有助于提高代码的可读性

inj.GetType().GetProperty("gender").SetValue(inj, Enum.Parse(inj.GetType().GetProperty("gender").PropertyType, "Male"), null);
另一种办法是:

inj.GetType().InvokeMember("gender",
    BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
    Type.DefaultBinder, inj, new[]{Enum.Parse(inj.GetType().GetProperty("gender").PropertyType, "Male")});

就我个人而言,我更喜欢两行代码。

您可以做如下操作,但不确定它如何有助于提高代码的可读性

inj.GetType().GetProperty("gender").SetValue(inj, Enum.Parse(inj.GetType().GetProperty("gender").PropertyType, "Male"), null);
另一种办法是:

inj.GetType().InvokeMember("gender",
    BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
    Type.DefaultBinder, inj, new[]{Enum.Parse(inj.GetType().GetProperty("gender").PropertyType, "Male")});

就个人而言,我更喜欢两行代码。

如果您选择单语句,但仍然尝试不调用
GetProperty
两次,那么可以使用


如果您选择单个语句,但仍然尝试不调用
GetProperty
两次,则可以使用


我应该改变我的帖子,并且说不要两次调用getpropertyconvoluted@user1186050这是因为你想要你的代码:)你所拥有的是相当可读的。。。而且反射通常没有语法糖分来缩短它。。。另外,如果
dynamic
是您的一个选项,那么它将更加紧凑(我已经在我的答案中添加了该选项)。我应该更改我的帖子,并且说,不必调用getproperty两次。您的替代方法似乎很长,而且convoluted@user1186050这是因为你想要你的代码:)你所拥有的是相当可读的。。。而且反射通常没有语法糖分来缩短它。。。另外,如果
dynamic
是您的一个选项,那么它将更加紧凑(我已将该选项添加到我的答案中)。