如果我定义一个扩展方法,如下所示:
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#编译器在编译时添加了检查?请澄清 :)
我有一类我有一个字符串字段。此字符串字段是常量,将来会在资源文件中移动,但暂时将保留在我们的类中。现在的情况是,我正在制作该类的数百个对象。所以我的问题是,哪种方法消耗的内存更少,为什么?
我应该让我的字符串变量 static
public class MyClass
{
public static string MyString = "My String";
}
Run Code Online (Sandbox Code Playgroud)我应该让我的字符串变量 const
public class MyClass
{
public const string MyString = "My String";
}
Run Code Online (Sandbox Code Playgroud)根据维基:非统一内存访问(NUMA)是一种用于多处理的计算机内存设计,其中内存访问时间取决于相对于处理器的内存位置.
但目前尚不清楚它是关于任何内存,包括缓存还是主内存.
例如,Xeon Phi处理器具有下一个架构: 
所有内核对内存(GDDR)的内存访问都是相同的.同时对于不同内核的内存访问L2缓存是不同的,因为检查了第一个本机L2缓存,然后通过环检查其他内核的L2缓存.是NUMA还是UMA架构?
我想除掉数字,$,逗号(,)之外的一切.
这只是剥离信件
string Cadena;
Cadena = tbpatronpos6.Text;
Cadena = Regex.Replace(Cadena, "([^0-9]|\\$|,)", "");
tbpatronpos6.Text = Cadena;
Run Code Online (Sandbox Code Playgroud)
为什么我的正则表达式不起作用,我该如何解决?
假设我有一个简单的对象支持对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上实现接口. …我想用以下类创建程序:Class Player,它存储有关get/set函数的玩家的一些信息.播放器可以作为AttackPlayer,它将拥有带有get/set功能的数据.Player也可以作为ProtectorPlayer,还有一些其他自己的数据,get/set函数与AttackPlayer不同.
Player也可以是TeamPlayer或FreePlayer,这些类中的每一个都有自己的数据等.
问题是如何正确实现层次结构?
起初我想过多重继承,无论如何都不好.类似于:Player AttackPlayer扩展Player ProtectorPlayer扩展Player
TeamPlayer扩展AttackPlayer或ProtectorPlayer FreePlayer扩展AttackPlayer或ProtectorPlayer
我也考虑过战略模式,但这里不适用,因为没有常见的算法.
有没有什么方法可以帮助组织这种互动?
另一种方法是在Player类中有一个字段,这有助于识别TeamPlayer/FreePlayer是Attack还是Protector类型,并根据它来访问适当的字段.在这种情况下,继承将是这样的:
播放器TeamPlayer扩展播放器FreePlayer扩展播放器
攻击,保护没有继承的结构或类,但作为Player类中的字段.
但我不喜欢这种方法,我正在寻找更好的设计.
美好的一天,
我刚刚开始学习视觉F#,它看起来非常有趣.对于我的第一个项目,我立即制作了一个窗体,从页面下载信息并将其显示在表单上的RichTextBox中.问题是,一旦表单显示并下载信息,它立即关闭.如何让我的杰作保持开放以供观看?有什么建议?
我目前有2个文件:
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#,我注意到C#语法的一个主要区别是类型推断比C#使用得多.这通常表现为F#的好处之一.为什么类型推断表现为有益?
想象一下,你有一个类层次结构和使用不同类的代码.强类型允许您快速检测在任何方法中使用的类.使用类型推断它不会那么明显,你必须使用提示来理解,使用哪个类.是否存在任何使用类型推断使F#代码更具可读性的技术?
我最近在Joomla组件(Kunena,更确切地说)中遇到了这个代码,所以使用$this->returnVS simple return语句有什么区别.
我对return语句的使用感到困惑,$this而不是简单的返回.让我知道如果它真的很简单,或者我错过了幼稚的概念,那么我肯定会抛弃这个问题.
检查代码 - http://pastebin.com/vvhuPhbZ
嗨所有SO用户,我对理解null和Empty几乎没有困惑.我知道null是特例,它不等于它自己.我想知道如何确定它是null,在什么基础上你告诉它是null,同样也是空的
只是我想知道编译器如何知道它是NULL还是空.