小编Mat*_*vey的帖子

是否有必要从扩展方法中抛出NullReferenceException?

如果我定义一个扩展方法,如下所示:

static public String ToTitleCase(this string instance, CultureInfo culture)
{
    if (instance == null)
        throw new NullReferenceException();

    if (culture == null)
        throw new ArgumentNullException("culture");

    return culture.TextInfo.ToTitleCase(instance);
}
Run Code Online (Sandbox Code Playgroud)

我是否有必要检查字符串实例是否为null并自己抛出空引用异常?或者CLR在这种情况下是否像实例方法一样处理扩展方法并为我处理检查/抛出?

我知道扩展方法只是静态方法的语法糖,也许C#编译器在编译时添加了检查?请澄清 :)

c# extension-methods

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

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

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

  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
查看次数

调用非统一内存访问(NUMA)的架构?

根据维基:非统一内存访问(NUMA)是一种用于多处理的计算机内存设计,其中内存访问时间取决于相对于处理器的内存位置.

但目前尚不清楚它是关于任何内存,包括缓存还是主内存.

例如,Xeon Phi处理器具有下一个架构: 在此输入图像描述

所有内核对内存(GDDR)的内存访问都是相同的.同时对于不同内核的内存访问L2缓存是不同的,因为检查了第一个本机L2缓存,然后通过环检查其他内核的L2缓存.是NUMA还是UMA架构?

cpu intel cpu-architecture numa

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

我想除去数字,$,逗号(,)之外的一切

我想除掉数字,$,逗号(,)之外的一切.

这只是剥离信件

        string Cadena;
        Cadena = tbpatronpos6.Text;

        Cadena = Regex.Replace(Cadena, "([^0-9]|\\$|,)", "");
        tbpatronpos6.Text = Cadena;
Run Code Online (Sandbox Code Playgroud)

为什么我的正则表达式不起作用,我该如何解决?

c# regex

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

隐式转换运算符和相等运算符

假设我有一个简单的对象支持对System.String的隐式转换

public sealed class CompanyCode
{
    public CompanyCode(String value)
    {
        // Regex validation on value format
        _value = value;
    }

    private readonly String _value;

    public override String ToString()
    {
        return _value;
    }

    static public implicit operator String(CompanyCode code)
    {
        if(code == null)
            return null;

        return code.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在让我们说我的程序的另一部分我用字符串进行比较:

var companyCode = { some company code object }

if (companyCode == "MSFTUKCAMBS")
    // do something...
Run Code Online (Sandbox Code Playgroud)

编译器对==运算符做了什么?是否隐式将companyCode转换为字符串并运行System.String ==实现?它是否正在使用System.Object ==实施?或者编译器会抱怨我?(我现在没有编译器来检查这个).

据我所知,我还有其他几种选择.

  • ==(String x)在CompanyCode上实现运算符.
  • IEquatable<String>在CompanyCode上实现接口. …

c# operator-overloading implicit-cast implicit-conversion

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

要使用的设计模式

我想用以下类创建程序:Class Player,它存储有关get/set函数的玩家的一些信息.播放器可以作为AttackPlayer,它将拥有带有get/set功能的数据.Player也可以作为ProtectorPlayer,还有一些其他自己的数据,get/set函数与AttackPlayer不同.

Player也可以是TeamPlayerFreePlayer,这些类中的每一个都有自己的数据等.

问题是如何正确实现层次结构?

起初我想过多重继承,无论如何都不好.类似于:Player AttackPlayer扩展Player ProtectorPlayer扩展Player

TeamPlayer扩展AttackPlayer或ProtectorPlayer FreePlayer扩展AttackPlayer或ProtectorPlayer

我也考虑过战略模式,但这里不适用,因为没有常见的算法.

有没有什么方法可以帮助组织这种互动?

另一种方法是在Player类中有一个字段,这有助于识别TeamPlayer/FreePlayer是Attack还是Protector类型,并根据它来访问适当的字段.在这种情况下,继承将是这样的:

播放器TeamPlayer扩展播放器FreePlayer扩展播放器

攻击,保护没有继承的结构或类,但作为Player类中的字段.

但我不喜欢这种方法,我正在寻找更好的设计.

oop inheritance class-hierarchy

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

显示后,Visual F#Windows窗体关闭

美好的一天,

我刚刚开始学习视觉F#,它看起来非常有趣.对于我的第一个项目,我立即制作了一个窗体,从页面下载信息并将其显示在表单上的RichTextBox中.问题是,一旦表单显示并下载信息,它立即关闭.如何让我的杰作保持开放以供观看?有什么建议?

我目前有2个文件:

  • Program.fs
  • Script1.fs

Program.fs应该"创建"表单,其中Script1.fs只是应用程序的入口点.

Program.fs

namespace Program1
    open System.Windows.Forms

    module public HelloWorld =
        let form = new Form(Visible = true, TopMost = true, Text = "Welcome to F#")

        let textB = new RichTextBox(Dock = DockStyle.Fill, Text = "Initial Text")
        form.Controls.Add textB

        open System.IO
        open System.Net

        /// Get the contents of the URL via a web request
        let http (url: string) =
         let req = System.Net.WebRequest.Create(url)
         let resp = req.GetResponse()
         let stream = resp.GetResponseStream()
         let reader = new StreamReader(stream) …
Run Code Online (Sandbox Code Playgroud)

f# winforms

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

类型推断有什么好处?

我开始学习F#,我注意到C#语法的一个主要区别是类型推断比C#使用得多.这通常表现为F#的好处之一.为什么类型推断表现为有益?

想象一下,你有一个类层次结构和使用不同类的代码.强类型允许您快速检测在任何方法中使用的类.使用类型推断它不会那么明显,你必须使用提示来理解,使用哪个类.是否存在任何使用类型推断使F#代码更具可读性的技术?

f# type-inference

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

$ this-> return和return之间的区别

我最近在Joomla组件(Kunena,更确切地说)中遇到了这个代码,所以使用$this->returnVS simple return语句有什么区别.

我已经谷歌了代码,但没有显着的结果,并在这里这里检查

我对return语句的使用感到困惑,$this而不是简单的返回.让我知道如果它真的很简单,或者我错过了幼稚的概念,那么我肯定会抛弃这个问题.

检查代码 - http://pastebin.com/vvhuPhbZ

php return this

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

如何区分Null或Empty?Null和Empty处理的标准是什么?

嗨所有SO用户,我对理解null和Empty几乎没有困惑.我知道null是特例,它不等于它自己.我想知道如何确定它是null,在什么基础上你告诉它是null,同样也是空的

  1. 它是基于内存分配还是什么?
  2. 如果那么如何为null分配内存.
  3. 如果它是空的那么什么crieteria适合它作为"空".

只是我想知道编译器如何知道它是NULL还是空.

c# compiler-construction null programming-languages

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