调整检查并转换为值

时间:2018-03-18 19:27:00

标签: c# frameworks game-engine

我是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
        }
    }
}

1 个答案:

答案 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
            }