【问题标题】:Parsing within a Set method在 Set 方法中解析
【发布时间】:2015-03-17 14:46:37
【问题描述】:

我知道这可能是一个简单的问题,但我想知道在 C# 中,将 set 方法中的传入字符串解析为 int 的最佳方法是什么?如果我有 public int foo {get; set;}

在片场我想解析传入的字符串

【问题讨论】:

  • 如果你的属性类型是int,你必须用int来设置。如果您需要从字符串进行转换,则要么将属性设为字符串类型,要么让调用者进行转换(或在类上添加辅助方法)。
  • 如何将单个字符串解析为与集合相关的 int?为什么不使用foo = int.Parse(str);编辑 误解了“设置”一词,您的意思是属性的设置器。最好的方法是将其解析为 int,在其中将其分配给属性而不是属性本身。为什么要让属性处理您的无效输入?

标签: c# string parsing int tryparse


【解决方案1】:

有很多方法可以给这只猫剥皮。我就是这样做的。

假设您的财产是:

public int Foo
{
   get { return _foo; }
   set { _foo = value; }
}

你可以在你的类上添加一个辅助方法:

public void SetFoo(string sFoo)
{
   Foo = Convert.ToInt32(sFoo);
}

然后,当您需要使用字符串设置值时,您可以调用该方法:

myFooObject.SetFoo("4");

【讨论】:

    【解决方案2】:

    我猜你有一些string 并且你想通过setter 将它解析成int。当然可以,但是属性必须是string

    private int foo
    
    public string Foo
    {
        get 
        { 
            return foo.ToString();
        }
    
        set
        {
            foo = Int32.Parse(value);
        }
    }
    

    但请记住,如果您的字符串不是数字,Int32.Parse() 会引发异常。在这种情况下,您应该考虑使用Int32.TryParse(),这可能是更好的选择。

    【讨论】:

      【解决方案3】:

      你是这个意思吗?

      private int _foo;
      public int Foo 
      {
        get { return _foo; }
        set 
        { 
          _foo = value; 
          ParseFoo(_foo);
        }
      }
      

      但是既然你在谈论字符串......

      private string _foo;
      public string Foo 
      {
          get { return _foo; }
          set {
              _foo = value;
              ParseIncomingString(_foo);
          }
      }
      

      【讨论】:

        【解决方案4】:

        由于该属性的类型为int,因此无法为其分配string。因此,您需要在将值分配给您的属性之前进行此解析。

        或者,您可以将 setter 设为私有,并使用采用 stringpublic 方法,并在方法内部进行验证,如果验证成功,则设置属性。

        【讨论】:

          【解决方案5】:

          我建议您在自动调用 set 方法时确保您的值是 int,然后再将其设置为您的属性。这意味着您要设置到属性的字符串应该在设置之前进行解析。

          如果你想按照你的要求去做,那么你可以简单地使用 Int32.Parse(value) 或 Int32.TryParse(value)。

          这两者之间的区别在于 Parse(value) 方法在解析失败时抛出异常,这意味着如果要捕获异常,则必须使用 try-catch 块,并且 TryParse(value) 如果在以下情况下返回 false解析失败,成功时为真。

          您可以阅读更多内容:https://msdn.microsoft.com/en-us/library/bb397679.aspx

          【讨论】:

            猜你喜欢
            • 2019-07-04
            • 2013-02-14
            • 2013-12-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-21
            相关资源
            最近更新 更多