小编cor*_*ore的帖子

C#:参数验证:null /空字符串

我不知道有多少次我不得不编写代码来验证字符串参数:

public RoomName(string name)
{
    if (string.IsNullOrEmpty(name))
    {
        throw new ArgumentException("Cannot be empty", "name");
    }
}
Run Code Online (Sandbox Code Playgroud)

反正有没有避免这个?是否有一些属性或设计合同机制来避免这种情况?有没有办法说:

public RoomName(NotNullOrEmptyString name)
{
Run Code Online (Sandbox Code Playgroud)

而不必实际创建该类型?

c# string argument-validation

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

将<li>标签的长列表分成列?

我有大约30名单<li>中<ul>.有没有办法,使用CSS,将这些分为三列十?

css

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

锁定C#

我还有点不清楚,什么时候可以锁定一些代码.我的一般经验法则是在读取或写入静态变量时将操作包装在锁中.但是当只读取静态变量时(例如,它是在类型初始化期间设置的只读),访问它不需要包含在锁定语句中,对吧?我最近看到一些代码看起来像下面的例子,它让我觉得我的多线程知识可能存在一些空白:

class Foo
{
    private static readonly string bar = "O_o";

    private bool TrySomething()
    {
        string bar;

        lock(Foo.objectToLockOn)
        {
            bar = Foo.bar;          
        }       

        // Do something with bar
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义 - 为什么会出现读取寄存器的并发问题?

此外,这个例子提出了另一个问题.其中一个比另一个好吗?(例如两个持有锁的时间较短?)我想我可以拆卸MSIL ......

class Foo
{
    private static string joke = "yo momma";

    private string GetJoke()
    {
        lock(Foo.objectToLockOn)
        {
            return Foo.joke;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

与

class Foo
{
    private static string joke = "yo momma";

        private string GetJoke()
        {
            string joke;

            lock(Foo.objectToLockOn)
            {
                joke = Foo.joke; …
Run Code Online (Sandbox Code Playgroud)

c# concurrency multithreading synchronization

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

在Angular中的兄弟范围之间进行通信

这是如何在作为范围兄弟姐妹的两个组件之间正确通信的吗?

  1. Ctrl1将事件发送到Ctrl1和Ctrl2的父作用域.
  2. 父作用域侦听来自Ctrl1的发出事件,然后将另一个事件向下广播到Ctrl2.
  3. Ctrl2侦听来自父作用域的广播事件.

图

javascript angularjs

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

输入通用值(C#)

当我尝试使用泛型类时,this.value为T:

if (this.value.GetType() == typeof(int))
{
    ((int)this.value)++;
}
else
{
    throw new InvalidOperationException
            ("T must be an int to perform this operation");
}
Run Code Online (Sandbox Code Playgroud)

我得到一个编译时错误:"无法将类型'T'转换为'int'"

当它是int时,我该怎么做才能对this.value执行整数运算?

请注意,这只是一个例子.代码用泛型键入转换,"int"只是T的一种类型的示例.

c# generics

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

使用LINQ从字符串中删除字符

我正在尝试通过编写一些简单的扩展方法来刷新我的LINQ.有没有更好的方法来编写如下函数从字符串中删除给定的字符列表(使用LINQ)?

它帮助我思考LINQ首先依赖的扩展方法:

public static string Remove(this string s, IEnumerable<char> chars)
{
    string removeChars = string.Concat(chars);

    return new string(s.ToCharArray().Where(c => !removeChars.Contains(c)).ToArray());
}
Run Code Online (Sandbox Code Playgroud)

但那很难看.Ergo LINQ.

我在LINQ语句中注意到的差异是我必须使用'select'而使用扩展方法,我不必这样做.

/// <summary>Strip characters out of a string.</summary>
/// <param name="chars">The characters to remove.</param>
public static string Remove(this string s, IEnumerable<char> chars)
{
    string removeChars = string.Concat(chars);

    var stripped = from c in s.ToCharArray()
                   where !removeChars.Contains(c)
                   select c;

    return new string(stripped.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道这个(上面的最后一个片段)是否是用于完成字符删除的最简洁的LINQ语句.

c# linq

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

无情地比较C#中的字符串

假设我有两个字符串:a和b.为了比较a和被忽略大小写时是否具有相同的值,我总是使用:

// (Assume a and b have been verified not to be null)

if (a.ToLower() == b.ToLower())
Run Code Online (Sandbox Code Playgroud)

但是,使用Reflector,我在.NET Framework中已经看过几次:

// (arg three is ignoreCase)

if (string.Compare(a, b, true) == 0)
Run Code Online (Sandbox Code Playgroud)

我测试哪个更快,每次用我使用的字符串ToLower()节拍Compare().

是否有理由Compare()而不是ToLower()?有什么不同的CultureInfo?我在挠头.

.net c# string string-comparison

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

任何"做"/ Action LINQ运营商的计划?

这是一个带foreach循环的简单方法:

IEnumerable<XElement> FieldsToXElements(object instance)
{
    var fieldElements = new List<XElement>();

    foreach (var field in instance.GetType().GetFields(instance))
    {
        fieldElements.Add(new XElement(field.Name, field.GetValue(instance)));
    }

    return fieldElements;
}
Run Code Online (Sandbox Code Playgroud)

有点难看.如果在LINQ中有一些运算符意味着"做某事"(例如Action对LINQ语句中选择的每一个执行一个),它会看起来更好,更简洁:

IEnumerable<XElement> FieldsToXElements(object instance)
{
    var fieldElements = new List<XElement>();

    from field in instance.GetType().GetFields(instance))
    let name = field.Name
    let value = field.GetValue(instance)
    do fieldElements.Add(new XElement(name, value));

    return fieldElements;
}
Run Code Online (Sandbox Code Playgroud)

我意识到这是主观的,只是我的意见.对于一个只有一行调用方法的foreach循环do,在我看来," "运算符是有意义的.但我想知道MS的任何人是否也想过同样的事情.这样的LINQ运营商是否计划在任何即将发布的版本中(例如,与C#4.0首次亮相)?

这是另一个带谓词的例子,虚拟do运算符真正使代码看起来更清晰.这个:

IEnumerable<XElement> FieldsToXElements
    (object instance, Func<FieldInfo, bool> predicate)
{
    var fieldElements = new List<XElement>();

    foreach (var field …
Run Code Online (Sandbox Code Playgroud)

c# linq c#-4.0

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

lodash为"按对象路径选择"?

假设我有这个对象(或这些对象的数组):

var person = {
    birth: {
        place: {
            country: 'USA'
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

我以为有一个lodash函数,我可以传入'birth.place.country'并获取值USA.

在lodasdh 3.x中有这样的功能,还是我想象这个?

javascript lodash

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

LINQ to SQL insert-if-non-exist

我想知道如果在表中不存在记录,是否有更简单的方法来插入记录.我还在尝试构建我的LINQ to SQL技能.

这就是我所拥有的,但似乎应该有一种更简单的方法.

public static TEntity InsertIfNotExists<TEntity>
(
    DataContext db,
    Table<TEntity> table,
    Func<TEntity,bool> where,
    TEntity record
)
    where TEntity : class
{
    TEntity existing = table.SingleOrDefault<TEntity>(where);

    if (existing != null)
    {
        return existing; 
    }
    else
    {
        table.InsertOnSubmit(record);

        // Can't use table.Context.SubmitChanges()
        // 'cause it's read-only

        db.SubmitChanges();
    }

    return record;
}
Run Code Online (Sandbox Code Playgroud)

c# linq-to-sql

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