【问题标题】:C# Structure with inner Clear() method具有内部 Clear() 方法的 C# 结构
【发布时间】:2011-09-20 12:36:12
【问题描述】:

我想要一个简单的商店信息结构。我的问题是创建清除存储值的内部方法。

   public struct GraphValues
   {
        public int min, max, ...;

        public GraphValues(int min, int max, ...)
        {
            this.min = min;
            this.max = max;
            ...
        }

        public static void Clear(this GraphValues values)
        {
            values.min.Equals(null);
            values.max.Equals(null);
            ...
        }
    }

所以在这个结构中写入新值就OK了,

GraphValues val = new GraphValues()
val.max = 12;
val.min = 1;

但我想将所有结构值设置为 null。调用类似的东西

val.Clear();

有什么想法吗? 谢谢

【问题讨论】:

  • 我建议你用我和马克的答案一起重写整个事情。

标签: c# methods structure internals


【解决方案1】:
  1. 结构不应该是可变的。将您的类型改为类。
  2. 要允许空值,请使用可为空的类型。
  3. 使用属性而不是公共字段。

固定代码:

public class GraphValues
{
     public int? Min { get; set; } 
     public int? Max { get; set; }
     // etc...

     public void Clear()
     {
         Min = null;
         Max = null;
         // etc...
     }
}

我还建议您考虑是否最好创建一个新对象而不是将现有对象上的字段设置为 null:

//val.Clear();           // Don't do this.
val = new GraphValues(); // Just create a new object.

【讨论】:

    【解决方案2】:

    Clear() 方法定义中删除“static”关键字,以便它可用于您的GraphValues 对象的每个实例。此外,无需传入参数 - 在 Clear() 方法中,您将可以访问所有成员。并且您希望将它们设置为 null,而不是将它们的值与 null 进行比较。

        public void Clear()
        {
            this.min = null;
            this.max = null;
            ...
        }
    

    为什么这是一个结构?只需使用类。

    【讨论】:

    • 它适用于每个实例:他在他的班级中将其作为他的班级的扩展方法。它至少是有创意的。
    • 是的……我不会用创意这个词。 :)
    • 这怎么可能编译?扩展方法必须在静态类中。
    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多