【问题标题】:Taking multiple types in a property setter在属性设置器中采用多种类型
【发布时间】:2015-01-29 09:16:51
【问题描述】:

我想选择设置具有多种类型的属性,并且正在努力寻找解决方案。

public static PropertyType Property
        {
            get { return Property;}
            set {
                if (value.GetType() == typeof(PropertyType))
                {
                    Property = value;                       
                }

                //Or any other type
                if (value.GetType() == typeof(string))
                {
                    Property = FunctionThatReturnsPropertyType(value);
                }
            }
        }

我希望这是有道理的,我只是将属性设置为一种类型,但我希望能够将其分配给其他类型,然后在 setter 中对其进行转换 - 这可能吗?

【问题讨论】:

  • 一系列重载的SetProperty()方法会干净得多
  • @AlexK。你好!我几乎走上了这条路,但决定创建一些通用转换方法并在分配给属性之前调用它们——我什至可能稍后再使用它们,因为它们是通用的。感谢您的建议!

标签: c# types properties setter


【解决方案1】:

尝试将属性类型作为对象。

public static Object PropertyName
{
    get { return PropertyName; }
    set { PropertyName = value; }
}

【讨论】:

  • 并失去所有类型安全性。
【解决方案2】:

您想要的看起来像是设计错误。 在 C# 属性的 setter 和 getter 中始终具有相同的类型。所以你基本上有下一个选择:

  • 将您的属性类型设为object(或dynamic,如果您想获得更糟糕的设计)并在设置器中转换值,如您在问题中所述 - 我强烈建议避免这种方法.
  • 摆脱property 的概念并创建单独的方法来获取字段的值并从不同的类型进行分配。 如果您在编译时不知道类型,这种方法将允许您分配值,而 getter 方法仍然可以正确输入。但总的来说,它看起来仍然是糟糕的设计。
  • 在属性之外进行所有转换,首选此解决方案。您应该知道在每种情况下您将使用哪种类型

【讨论】:

  • 嗨!我得出自己的结论,这确实是一个设计错误,我最终只是在涉及属性之前调用了转换方法。感谢您的回答!
猜你喜欢
  • 2010-09-19
  • 2022-01-17
  • 2013-07-16
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
相关资源
最近更新 更多