我不断检查字符串字段以检查它们是否为空或空白.
if(myString == null || myString.Trim().Length == 0)
{
throw new ArgumentException("Blank strings cannot be handled.");
}
Run Code Online (Sandbox Code Playgroud)
为了节省自己的一些输入,可以为String类创建一个具有相同效果的扩展方法吗?我理解如何为类实例添加扩展方法,但是如何向类添加静态扩展方法呢?
if(String.IsNullOrBlank(myString))
{
throw new ArgumentException("Blank strings cannot be handled.");
}
Run Code Online (Sandbox Code Playgroud) F#有一堆标准的序列操作符,我已经了解并喜欢我对Mathematica的体验.F#现在得到了很多关注,当它一般发布时,我打算经常使用它.
现在,由于F#尚未普遍发布,我无法在生产代码中真正使用它.LINQ使用类似SQL的名称来实现其中一些运算符(例如'select'是'map','where'是'filter'),但是我找不到'fold','iter'或'partition'的实现.
有没有人见过标准序列运算符的任何C#实现?这是某人应该写的东西吗?
我经常在F#中使用这个递归的"访客"
let rec visitor dir filter=
seq { yield! Directory.GetFiles(dir, filter)
for subdir in Directory.GetDirectories(dir) do yield! visitor subdir filter}
Run Code Online (Sandbox Code Playgroud)
最近我开始在C#中实现一些F#功能,我试图将其重现为IEnumerable,但是我很难得到更多:
static IEnumerable<string> Visitor(string root, string filter)
{
foreach (var file in Directory.GetFiles(root, filter))
yield return file;
foreach (var subdir in Directory.GetDirectories(root))
foreach (var file in Visitor(subdir, filter))
yield return file;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我必须在C#版本中为递归做一个双重foreach,而不是在F#中... seq {}是否隐含地执行'concat'?
我正在尝试编写一个通用扩展方法,让我这样做:
this.startDate = startDateXAttribute.NullOrPropertyOf<DateTime>(() =>
{
return DateTime.Parse(startDateXAttribute.Value);
});
Run Code Online (Sandbox Code Playgroud)
NullOrPropertyOf()将返回null如果它是一个上使用的null对象(例如,如果startDateXAttribute是null),或返回的结果Func,如果它不为空.
这种扩展方法会是什么样的?
今天我终于"得到"了Func<>委托,并看到我如何使用它来使我的一些不太可读的LINQ查询(希望)更具可读性.
这是一个简单的代码示例,在一个(非常)简单的例子中说明了上述内容
List<int> numbers = new List<int> { 1, 5, 6, 3, 8, 7, 9, 2, 3, 4, 5, 6, };
// To get the count of those that are less than four we might write:
int lessThanFourCount = numbers.Where(n => n < 4).Count();
// But this can also be written as:
Func<int, bool> lessThanFour = n => n < 4;
int lessThanFourCount = numbers.Where(lessThanFour).Count();
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供他们使用的场景的任何示例Func<>吗?
(请注意,我不主张Func<>在如上所示的简单场景中使用,它只是一个希望使功能变得Func<>清晰的示例.)
可能是一个C#noob问题,所以不要激怒我.我试图这样做:
if (ConfigurationManager.ConnectionStrings["PrimaryConnectionString"].ConnectionString != null)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
但我一直得到一个System.NullReferenceException.我想,因为它返回一个我可以检查null并继续前进的字符串.我花了一段时间才找到正确的方法:
ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings["PrimaryConnectionString"];
if (cs != null)
{
this.Connection.ConnectionString = cs.ConnectionString;
}
Run Code Online (Sandbox Code Playgroud)
所以在其他情况下,比如检查Session对象的某些值,我会null像这样检查:
if (Session["EmployeeID"] != null)
{
_EmployeeID = System.Convert.ToInt32(Session["EmployeeID"]);
}
Run Code Online (Sandbox Code Playgroud)
所以我只是想知道你怎么知道什么时候能做或不能做检查null?