相关疑难解决方法(0)

const,readonly和get in static class之间的区别是什么

我有个问题.最近我发现自己使用了3种不同的代码行,经过仔细检查后看起来和感觉都一样.

public static class constant
{
    public static readonly int val1 = 5;
    public const int val2 = 5;
    public static int val3 { get { return 5; } }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,它们是否相同,是否应该使用另一个?如果是这样.什么时候?

作为视觉工作室中的一个额外问题,为什么它们在intellisense中的表现方式不同?

在此输入图像描述

c#

19
推荐指数
1
解决办法
4329
查看次数

静态只读与const - 不同的装配POV?

关于这个问题有很多问题,但没有一个(除了一个,但仍然是一个短的)正在处理以下场景.

来自C#4书:

在此输入图像描述

马克还写道:

如果更改const的值,则需要重建所有客户端

题 :

1)为什么?是static readonlyconst- static

2)实际值保存在哪里

3)如何使一个领域static readonly实际上solve这个问题"落后于现场"?

c# static const readonly

17
推荐指数
3
解决办法
2856
查看次数

字符串实习

在下面的代码中,我正在检查对象引用的相等性.

string x = "Some Text";
string y = "Some Other Text";
string z = "Some Text";

Console.WriteLine(object.ReferenceEquals(x, y)); // False
Console.WriteLine(object.ReferenceEquals(x, z)); // True
Console.WriteLine(object.ReferenceEquals(y, z)); // False

y = "Some Text";

Console.WriteLine(object.ReferenceEquals(x, y)); // True
Console.WriteLine(object.ReferenceEquals(x, z)); // True
Console.WriteLine(object.ReferenceEquals(y, z)); // True
Run Code Online (Sandbox Code Playgroud)

这里:

  • xz指同一个对象; 我可以说x是实习并z使用了taht版本.好吧,我不确定这个; 如果我错了,请纠正我.
  • y通过赋予它与x相同的值来改变它的值.我以为它会在这里创建一个新对象; 但我错了,它使用相同的参考.

我的问题是:

  • 是否为我使用的每个字符串.net使用字符串实习生
  • 如果是这样,是不是会伤害表现?
  • 如果没有,上面的例子中引用如何变得相同?

.net c# string

11
推荐指数
1
解决办法
560
查看次数

静态和常量字段的内存消耗

我有一类我有一个字符串字段。此字符串字段是常量,将来会在资源文件中移动,但暂时将保留在我们的类中。现在的情况是,我正在制作该类的数百个对象。所以我的问题是,哪种方法消耗的内存更少,为什么?

  1. 我应该让我的字符串变量 static

    public class MyClass
    {
        public static string MyString = "My String";
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我应该让我的字符串变量 const

     public class MyClass
     {
        public const string MyString = "My String";
     }
    
    Run Code Online (Sandbox Code Playgroud)

c#

5
推荐指数
1
解决办法
1663
查看次数

CIL - 如何使用公共静态文字字段?

这可能是一个愚蠢的问题,但我真的很好奇,如果我能做到这一点.我写了以下示例程序:

class Test1 {

    public const int b = 8;
    public static int z = 3;

    public static void Main(string[] args){
        const int q = 6;
        Console.WriteLine(q);
        Console.WriteLine(b);
        Console.WriteLine(z);

    }
}
Run Code Online (Sandbox Code Playgroud)

Y编译使用mcs然后我用生成的exe组装了生成的exe monodis.获得以下代码:

.field public static literal  int32 b = int32(0x00000008)
.field  public static  int32 z

// method line 2
.method public static hidebysig 
       default void Main (string[] args)  cil managed 
{
    // Method begins at RVA 0x2058
      .entrypoint
      // Code size 23 (0x17)
      .maxstack 8
      IL_0000: …
Run Code Online (Sandbox Code Playgroud)

c# mono cil ilasm

5
推荐指数
1
解决办法
756
查看次数

NUnit 3.0 TestCase const自定义对象参数

我编写了这个类SomeObject,我想定义一个const这个对象的实例来保存/重用我的TestCases.我应该如何重写下面的代码来实现这种行为?

[TestFixture]
public class SomeObjectTests
{
    private const SomeObject item0 = new SomeObject(0.0); // doesn't work

    [TestCase(item0, ExpectedResult = 0.0)]
    public double TestSomeObjectValue(SomeObject so)
    {
        return so.Value;
    }

    [TestCase(item0, ExpectedResult = "0.0")]
    public string TestSomeObjectValueString(SomeObject so)
    {
        return so.ValueString;
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

除string之外的引用类型的const字段只能用null初始化.

c# nunit

5
推荐指数
2
解决办法
6970
查看次数

c#公共课中的角色

我有一节课:

我想访问这些默认字符串,但C#编译器不喜欢组合Const来创建Const.

public class cGlobals
{
    // Some Default Values

    public class Client
    {
        public const string DatabaseSDF = "database.sdf";
        public const string DatabaseDir = "database";
        public const string DatabaseFullLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                                                       DatabaseDir);
        public const string DataSource = Path.Combine(DatabaseDir, DatabaseSDF);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法而不是硬编码字符串?我想使用特殊文件夹和Path.Combine.

谢谢

.net c# string

4
推荐指数
1
解决办法
1050
查看次数

List <long>属性的不稳定行为

public class Foo
{
    public static List<long> myList = new List<long>() { 1,2,3 }
}
Run Code Online (Sandbox Code Playgroud)

在另一种方法:

var testList = Foo.myList;
Run Code Online (Sandbox Code Playgroud)

如果我在最后一行放置断点并检查testList它会不时给我不同的长度.

当我使用ToList()Foo.myList似乎正常运行.但为什么?

编辑:

我的问题是我做了一个ajax调用>修改Foo.myList>新的ajax调用> Foo.myList再次获取并获得修改后的值.

c# asp.net

4
推荐指数
1
解决办法
99
查看次数

为什么在创建const字符串变量时不能使用String.Empty?

我经常使用String.Empty占位符,相当于"".所以我的问题,为什么不const喜欢String.Empty?他们编译相同.

// Good
private const string example = "";

// Bad
private const string example = String.Empty;
Run Code Online (Sandbox Code Playgroud)

是什么String.Empty让它无法与a一起使用const.

c#

4
推荐指数
1
解决办法
185
查看次数

如何在 F# 中定义常量文字

在 C# 中,我这样做:

 public const double PAPER_SIZE_WIDTH = 8.5 * 96; 
Run Code Online (Sandbox Code Playgroud)

在 F# 中定义此全局常量的最佳方法是什么?

这失败了:

  [<Literal>]
  let PaperSizeWidth = 8.5*96.0  
Run Code Online (Sandbox Code Playgroud)

错误:这不是有效的常量表达式

TIA

f#

3
推荐指数
1
解决办法
401
查看次数

标签 统计

c# ×9

.net ×2

string ×2

asp.net ×1

cil ×1

const ×1

f# ×1

ilasm ×1

mono ×1

nunit ×1

readonly ×1

static ×1