【问题标题】:C# - When to convert values of class propertiesC# - 何时转换类属性的值
【发布时间】:2012-05-04 05:07:40
【问题描述】:

我想知道哪种做法更正确或更好:

部分课程:

public class foo
{
private Single amount;
public Single Amount
{
get
    {
        return amount;
    }
set
    {
        amount = Convert.ToSingle(value);
    }
}
}

public Single Amount {get;set;}

并转换代码中的值,如下所示:

foo myFoo = new foo();
myFoo.Amount = Convert.ToSingle(somevalue);

我将从数据库中获取值(某个值),因此我可以轻松地将所有值作为字符串传递给类并在那里处理所有转换(或在数据访问层中进行转换)。我只是想知道哪种做法更好(或我没有想到的)。

【问题讨论】:

  • 第二个对我来说更具可读性。
  • 无论如何,您的第一个示例受Single 的约束,因为它是属性类型。除非 value 可以隐式转换,否则它永远不会进入你的 setter。
  • 第一个不起作用,因为您只能将单个传递给单个属性的获取。这使得 Convert.ToSingle 什么都不做。

标签: c# class get set public


【解决方案1】:

第二个绝对是更可取的 IMO:

public Single Amount { get; set; }

你不希望你的班级在后台做一些从外面看不清楚的事情(比如类型转换)。

符合类属性格式是外部代码的工作,而不是相反。

【讨论】:

    【解决方案2】:

    尽管行为上存在差异,但性能应该可以忽略不计

    【讨论】:

    • 它们不一样,行为不同。
    【解决方案3】:

    他们指定短版的主要原因是你不必编写整个长版,所以你应该从短版开始:

    public Single Amount { get; set; }
    

    隐式转换是一个非常糟糕的主意,您肯定需要显式转换,以便您的用户知道转换正在进行,并且您的函数不会意外获取任何内容。考虑一下,当您在属性内进行转换时,您的属性会期待一个对象,这可能是任何可转换为 Single 的对象,因此您会引入错误的可能性。

    你不希望你的属性的用户发现他分配了错误的东西导致它由于某种原因变成0,你宁愿希望编译器提前警告他而不是他必须经历一些虽然调试。

    转换他们给你的任何东西不是你的责任,而是希望他们给一个单身......

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 1970-01-01
      • 2023-04-11
      • 2012-09-26
      • 2017-03-22
      • 2017-02-26
      • 2023-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多