我是C#的初学者,并且遇到了一个相当不寻常的问题。现在,虽然我的代码目前正在按预期工作,但我希望有更好的方法来实现它。相关代码位于我的列表的ForEach
范围内。这两个示例类继承了Example。我希望有更好的方法以更可重用的方式(方法)检查和执行以下代码,因为我在代码中的其他地方使用了这样的检查和应用程序。
public interface Example
{
// some stuff
}
public class Something
{
public List<Example> keybind ... // instantiate
public Something()
{
keybind.ForEach(b =>
{
// these checks are what I want to reuse
if (b.GetType() == typeof(Example1)
(b as Example1).Value = // new value
if (b.GetType() == typeof(Example2)
(b as Example2).Value = // new value
}
}
}
答案 0 :(得分:3)
根本不要进行检查 - 这就是接口的用途。如果你在接口中定义了一个属性Value
,那么实现该接口的任何类都需要实现该属性,从而根本不需要进行强制转换。
public interface Example
{
string Value { get; set; }
}
public class Something
{
public List<Example> keybind... // instantiate
public Something()
{
keybind.ForEach(b =>
{
b.Value = // new value
}
}
}
如果你确实需要检查类型,那么你的语法是正确的,我建议的更好的选择是在下面(C#7.0的一部分):
if (b is Example1 ex1)
{
//do stuff
}