相关疑难解决方法(0)

c#中的常量字段成员

大家好我很困惑我是const long size =((long)int.Maxvalue+1)/4如何插入的...当我们定义static const long size =((long)int.Maxvalue+1)/4什么是readonly会员时会发生什么......

c#

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

如何在const领域使用科学记数法?

我工作在一个数学库,并且由于与工作的内在困境double我编码人人平等的比较型a == bMath.Abs(a - b) <= epsilon.

此外,默认情况下,我希望以最大考虑精度生成格式化的字符串.也就是说,如果epsilon0.001我想要的默认格式N3.

我很高兴我做了以下事情:

public static class Math3D
{
     internal const int ROUND = 3;
     public const double Epsilon = 1e-ROUND;
}
Run Code Online (Sandbox Code Playgroud)

......我收到了编译错误.显然这是不允许的.

有了这个限制,我认为我无法将两个相互依赖的常量定义为consts.显然我可以定义Epsilon为只读字段,但我觉得这样做在概念上是错误的.我错过了一个如何做到这一点的明显方法吗?

c#

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

使用 AppSetting 设置常量变量

我怎样才能做到这一点:

private const string myConstant = ConfigurationManager.AppSettings["key"];
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:分配给“XXX”的表达式必须是常量。

我知道这个 AppSettings 可能永远不会改变,但我不想在我的控制器中硬编码值,如下所示:

private const string myConstant = "XXX";
Run Code Online (Sandbox Code Playgroud)

我想创建一个单身人士,但我不知道这是否真的是个好主意..有什么建议吗?

谢谢 :)

c# constants appsettings

5
推荐指数
0
解决办法
4580
查看次数

.NET const影响编译的程序集大小

为什么const在编译时它们的值被替换为值,但是仍然包含在汇编中?至少这是IL DASM和Reflector所展示的.

目前我const用于定义许多幻数和字符串,以便更容易地更改代码而不影响运行时性能.

现在我知道这不会影响已用内存,但它仍会影响编译的程序集大小,这对于手机应用程序来说至关重要.

另一个缺点是,在查看反汇编代码时,其他人更容易理解幻数.

我真的很感兴趣为什么编译器(Mono和.NET)完全这样做?

.net compilation const

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

为什么不能在类中声明const静态字符串

为什么不能在类中声明const静态字符串?必须使用静态只读

c#

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

如何在C#中获得C++的"const"等价物?

在C++中,如果我想在编译时初始化一个对象并且之后永远不会改变,我只需添加前缀const.

在C#中,我写道

    // file extensions of interest
    private const List<string> _ExtensionsOfInterest = new List<string>()
    {
        ".doc", ".docx", ".pdf", ".png", ".jpg"
    };
Run Code Online (Sandbox Code Playgroud)

并得到错误

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

然后我研究了Stack Overflow上的错误,并提出了"解决方案" ReadOnlyCollection<T>.除字符串之外的引用类型的const字段只能使用null Error初始化

但这并没有真正给我我想要的行为,因为

    // file extensions of interest
    private static ReadOnlyCollection<string> _ExtensionsOfInterest = new ReadOnlyCollection<string>()
    {
        ".doc", ".docx", ".pdf", ".png", ".jpg"
    };
Run Code Online (Sandbox Code Playgroud)

仍然可以重新分配.

那么我该怎样做我想做的事情呢?

(令人惊讶的是,除了我想要的语言之外,C#还具有所有语言功能的可模仿性.

c#

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

VB.NET中常量的容器

假设我有一些相互依赖的常量,我决定将它们放在一个容器中,而不是将它作为一个单独的常量保存在一个容器中.

我认为使用a Structure作为该范围,但编译器强制我声明该结构的私有成员.

  ' Compile error: at least one private member is needed.
  Private Structure BandSizes 
    Const BandHeight As Short = HourHeight + 20
    Const HourHeight As Short = HalfHourHeight + 20
    Const HalfHourHeight As Short = LineHeight + PictureHeight + 20
    Const PictureHeight As Short = 20
    Const LineHeight As Short = StopHeight + 10
    Const LineWidth As Short = 50
    Const StopHeight As Short = 30
  End Structure
Run Code Online (Sandbox Code Playgroud)

因为我只有几个整数常量,我应该创建一个共享(静态)类吗?

平台:VB.NET(.NET 2)

.net vb.net .net-2.0

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

C# - 无法从事件处理程序访问全局变量

我有一个带有全局变量的Windows窗体应用程序 - 一个名为的字符串testPath.

此字符串用于保存路径 - 默认情况下C:\temp\.当用户单击按钮时,将创建此目录(如果它尚不存在).

如果用户想要更改路径的值,还有一个文本框控件.

在按钮的事件处理程序中,我尝试访问testPath并获得空引用.

我没有改变testPath任何地方的值,除非我将它传递给文本框Control和从文本框Control传递.

我究竟做错了什么?全局变量如何在一秒内有内容,然后在之后它指向空引用?

这是完整的代码:

public string testPath = @"C:\temp\";

public MainForm()
{
     //Windows Designer call
     InitializeComponent();

     //Show the testPath in the textBox (using Invokes)
     this.textBox1.Invoke(new MethodInvoker(delegate { this.textBox1.Text = testPath; } ));

     //here, testPath contains 'C:\temp\'
}

//Button "Click" handler
private void Button1Click(object sender, EventArgs e)
{
     //here, testPath contains a null reference!

     //If the user changed testPath in the textBox, we need to save …
Run Code Online (Sandbox Code Playgroud)

c# variables null global reference

2
推荐指数
1
解决办法
3915
查看次数

错误CS0133:将函数的结果赋值给C#.net中的const

尝试整理范围并避免可能多次调用RegisterWindowMessage.
目前有一个类使用以下成员一次

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int RegisterWindowMessage(string lpString);

private int m_message = RegisterWindowMessage("MY_MSG"); 
Run Code Online (Sandbox Code Playgroud)

由于我们只有一个实例,这似乎没问题,但认为使用它会更整洁.根据我的基本C#理解,这应该调用RegisterWindowMessage并将结果分配给int并且不允许它更改.

private const int message = RegisterWindowMessage("MY_MSG"); 
Run Code Online (Sandbox Code Playgroud)

但试图这样做会导致a

error CS0133: The expression being assigned to 'someclass.messageEvent' must be constant
Run Code Online (Sandbox Code Playgroud)

所以现在我很困惑,这是否意味着函数被分配并且每次调用之前都m_message被调用过,是否还有其他缺失?

c# syntax pinvoke

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

是否只能标记一个私有字段?

public class Foo
{
    private readonly Bar _bar;
}

public class Foo2
{
    private Bar _bar;
}
Run Code Online (Sandbox Code Playgroud)

我认为将其标记为只读是没有任何好处的.这是私人的,如果我尝试在内部做一些修改它,那我是愚蠢的,因为我知道我希望我的班级表现如何?那么,有什么意义呢?我不认为这里有任何性能提升,所以不可能.

c# private readonly

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