代码之家  ›  专栏  ›  技术社区  ›  San Jaisy

自定义setter属性C#10

  •  0
  • San Jaisy  · 技术社区  · 4 年前

    我正在使用C#10,并希望转换绑定到的任何值 Operator 到小写

    public class Rule
     {
        public string Operator { get; set; }
     }
    

    我无法创建另一个属性并设置值。

    private string _Operator ;
    public string Operator 
    {
      get            
      {
        return _Operator ;
      }
      set             
      {
        _Operator = value.toLower();
      }
    }
    

    有没有任何方法可以直接转换为小写形式 public string Operator { get; set; }

    1 回复  |  直到 4 年前
        1
  •  1
  •   tmaj    4 年前

    A.拥有单独的财产

    public string Operator { get; set; }
    
    public string BetterOperator => Operator?.ToLower();
    

    如果你有一个无法完全控制的原始类(例如自动生成),我会尝试使用分部类:

    public partial class Rule
    {
        public string Operator { get; set; }
    }
    
    public partial class Rule
    {
        public string BetterOperator => Operator?.ToLower();
    }
    

    B.虚拟

    另一种选择可以是使属性成为虚拟属性并使用派生类:

    ( 我从类切换到记录只是为了一个不错的控制台。WriteLine )

    public record Rule
    {
        public virtual string? Operator { get; set; }
    }
    
    public record RuleExt : Rule
    {
        public override string? Operator
        {
            get { return base.Operator; }
            set { base.Operator = value?.ToLower(); }
        }
    }
    

    然后是以下内容:

    var r = new RuleExt() { Operator = "Plus" };
    
    Print(r);
    
    static void Print(Rule r) => Console.WriteLine(r);
    

    将打印:

    RuleExt { Operator = plus }
    
    推荐文章