【问题标题】:C# How to disable the useage of pointers (How to clone a non-cloneable variable)C# 如何禁用指针的使用(如何克隆不可克隆的变量)
【发布时间】:2016-09-07 20:31:41
【问题描述】:

问题

你好堆栈溢出。我遇到了一个问题。 尽管 C# 自动启用了指针的使用,这非常有用,但我需要克隆一个不可克隆的变量一秒钟(一个 int)。

我的代码

我有一个

public int FirstLine 
{ 
    get { return Convert.ToInt32(File.ReadAllLines(@"example.txt")[0]); } 
    set { File.WriteAllLines(@"example.txt", new string[1]{ value.ToString() }); } 
}

我用来有一个变量,该变量在访问读取时从文件中获取,如果访问写入,它将值写入文件,以便有一个按需更新并保存的变量。

我知道示例代码说起来非常“不安全”,我只是在整理一个粗略的例子来说明我在做什么。在我的代码的其他地方,我访问了这个变量:

int GettingVariable = FirstLine;

由于 C# 自动使用指针,GettingVariable 将根据文件需求自动更新,这不是我想要的。

我想要什么作为答案

我希望能够克隆 int,禁用指针使用,并且不必使用 unsafe void(如果可能)。由于没有内置 int.Clone(),我该如何管理?

【问题讨论】:

    标签: c# pointers clone


    【解决方案1】:

    由于 C# 自动使用指针,GettingVariable 将根据文件需求自动更新,这不是我想要的。

    这不是真的。该代码没有使用任何指针,并且有问题的值被复制,并且不会观察到对该文件或正在访问它的对象的任何更改。

    我希望能够克隆 int,禁用指针使用,并且不必使用 unsafe void(如果可能)。由于没有内置 int.Clone(),我该如何管理?

    使用您已有的代码。它已经具有您所要求的语义。

    【讨论】:

    • 抱歉,我的 Visual Studio 曾经(现在仍然是)表现得非常怪异并且没有构建。由于它的行为很奇怪,它构建了一个旧版本,并且由于我输入的代码不起作用,它触发了这种逻辑在我的大脑中继续,并提出一个问题。非常抱歉浪费您的时间。
    【解决方案2】:

    Servy 是绝对正确的。

    为您提供更多背景知识,C# 不是“使用指针”,正如您所描述的 - class 对象行为 like 双指针(即 @987654322 @),尤其是在处理 refout 方法时,而 struct 对象表现出上述语义。

    您不应将所有 C# 都视为 C++ 的包装,而应熟悉 C# 语义,尤其是当您达到明确的目标时。祝你好运!

    【讨论】:

      【解决方案3】:

      由于 C# 自动使用指针,GettingVariable 将 根据文件需求自动更新,这不是我想要的。

      这就是我认为你出错的地方。这是因为您使用的是属性而不是变量,我假设每次都访问该属性,与指针无关。因此,例如使用此代码:

      public int FirstLine 
      { 
          get { return Convert.ToInt32(File.ReadAllLines(@"example.txt")[0]);
      }
      

      每次您尝试获取 Firstline 的值时,它都会运行该代码。但如果你已经拥有价值,它就不会改变。例如:

      object.FirstLine = 5;
      int firstlineA = object.FirstLine; //Returns 5
      object.FirstLine = 10;
      int firstLineB = object.FirstLine; //Returns 10
      int firstlineC = firstlineA; //Still returns 5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多