小编Gro*_*ile的帖子

我应该怎么做"可能比较值类型与'null'"?

在为自定义NUnit约束编写此方法时.

    private void AddMatchFailure<TExpected, TActual>(string failureName, TExpected expected, TActual actual)
    {
        _matchFailures.Add(
            String.Format(MatchFailureFormat, failureName,
            (expected == null) ? "null" : expected.ToString(),
            (actual == null) ? "null" : actual.ToString()));
    }
Run Code Online (Sandbox Code Playgroud)

Resharper警告expectedactual可能是ValueType物体.

e.g. TExpected is DateTime
   expected == null;//  but DateTime is a struct.

将ValueType与null进行比较时有哪些规则?如何在不限制通用参数的情况下通过添加类约束来编写方法来解决这个问题?

c#

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

如何防止ReadAsStringAsync返回双重转义的字符串?

我有一个Web API方法,看起来有点像这样:

    [HttpPost]
    public ResponseMessageResult Post(Thing thing)
    {
        var content = "\r";
        var httpResponseMessage = Request.CreateResponse(HttpStatusCode.Accepted, content);
        return ResponseMessage(httpResponseMessage);
    }
Run Code Online (Sandbox Code Playgroud)

在其他一些客户端代码中,当我打电话时:

    var content = httpResponseMessage.Content.ReadAsStringAsync().Result;
Run Code Online (Sandbox Code Playgroud)

content 是:

    "\\r"
Run Code Online (Sandbox Code Playgroud)

但我希望它保持原状:

    "\r"
Run Code Online (Sandbox Code Playgroud)

为什么客户端收到双重转义的字符串,如何防止它发生?

c# asp.net-web-api

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

如果类型T需要实例化,为什么泛型类签名需要指定new()?

我正在写一个Generic类,如下所示.

public class Foo<T> : 
    where T : Bar, new()
{
    public void MethodInFoo()
    {
        T _t = new T();
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,_tT类型的对象在运行时被实例化.为了支持泛型类型T的实例化,语言强制我将new()放在类签名中.如果Bar是一个抽象类,我同意这个,但是如果Bar标准的非抽象类具有公共无参数构造函数,为什么需要这样.

如果未找到new(),编译器将提示以下消息.

无法创建变量类型"T"的实例,因为它没有new()约束

c# generics

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

有没有办法转换用作ItemsSource的集合的成员?

在WPF中,您可以使用IValueConverter或IMultiValueConverter将数据绑定值从say转换int为aColor.

我有一个模型对象的集合,我想将它们转换为他们的ViewModel表示,但在这种情况下,

<ListBox ItemsSource="{Binding ModelItems, 
     Converter={StaticResource ModelToViewModelConverter}" />
Run Code Online (Sandbox Code Playgroud)

转换器将被写入以立即转换整个集合ModelItems.

我希望单独转换集合的项目,有没有办法做到这一点?

wpf

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

IEnumerable <IMyInterface>隐式来自类[]但不来自Struct [].为什么?

鉴于:

public interface IMyInterface{

}

public class MyClass:IMyInterface{
     public MyClass(){}
}

public struct MyStruct:IMyInterface{
     private int _myField;

     public MyStruct(int myField){_myField = myField;}
}
Run Code Online (Sandbox Code Playgroud)

我为什么要写:

IEnumerable<IMyInterface> myClassImps = new[] {
    new MyClass(),
    new MyClass(),
    new MyClass()
};
Run Code Online (Sandbox Code Playgroud)

但不是:

IEnumerable<IMyInterface> myStructImps = new[]{
    new MyStruct(0),
    new MyStruct(1),
    new MyStruct(2)
};
Run Code Online (Sandbox Code Playgroud)

这给了我以下警告:

错误29无法隐式转换类型 'MyApp.MyNS.MyStruct []' 为 'System.Collections.Generic.IEnumerable <MyApp.MyNS.IMyInterface>'

而且必须写成:

IEnumerable<IMyInterface> myStructImps = new IMyInterface[]{
    new MyStruct(0),
    new MyStruct(1),
    new MyStruct(2)
};
Run Code Online (Sandbox Code Playgroud)

c#

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

任何可执行Func <Foo> N次并获得IEnumerable <Foo>的方法?

我可能只是在问这个问题,因为我已经把自己蒙蔽了一些非常明显的东西,但是,

我在寻找像这样的东西......

IEnumerable<Foo> fooSeq = Enumerable.Generate(()=> new Foo(), 5);
Run Code Online (Sandbox Code Playgroud)

这将使fooSeq成为5个新Foo实例的序列.

似乎无法找到它.

c#

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

我可以配置NUnit,以便在运行测试时Debug.Fail不显示消息框吗?

我有这个属性:

    public SubjectStatus Status
    {
        get { return status; }
        set
        {
            if (Enum.IsDefined(typeof(SubjectStatus), value))
            {
                status = value;
            }
            else
            {
                Debug.Fail("Error setting Subject.Status", "There is no SubjectStatus enum constant defined for that value.");
                return;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

和这个单元测试

    [Test]
    public void StatusProperty_StatusAssignedValueWithoutEnumDefinition_StatusUnchanged()
    {
        Subject subject = new TestSubjectImp("1");

        //  assigned by casting from an int to a defined value
        subject.Status = (SubjectStatus)2;
        Assert.AreEqual(SubjectStatus.Completed, subject.Status);            

        //  assigned by casting from an int to an undefined value
        subject.Status = (SubjectStatus)100; …
Run Code Online (Sandbox Code Playgroud)

c# debugging nunit

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

通过ICustomTypeDescriptor生成WPF DataGrid AutoColumn

在测试项目中,我在以下场景中设法自动生成WPF DataGrid列,其中数据存储在Dictionary中,并通过PropertyDescriptors执行绑定:

public class People:List<Person>{
     ...
}
public class Person:Dictionary<string,string>,INotifyPropertyChanged,ICustomTypeDescriptor
{

}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是在我的实际项目中我使用的是MVVM,因此它是People ViewModel,它继承了ViewModelBase,因此无法继承List <Person>.我尝试使用内部List <Person>实现IList <Person>,并显式将DataContext设置为IList <Person>引用,但这不起作用.

我已经看到了绑定一个双赢窗体DataGridView类似的帖子在这里,所以我不知道,如果同样的逻辑也适用于WPF和为主,到底是什么导致了ICustomTypeDescriptor实施继承名单<T>这是当被拾起当你简单地实现IList <T>时会丢失.

c# wpf icustomtypedescriptor

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

什么时候.Net在UNIX上运行?

我听说过用于开发跨平台.Net应用程序的mono,但为什么.Net Framework本身包含条件编译

#if PLATFORM_UNIX
...
#endif // PLATFORM_UNIX
Run Code Online (Sandbox Code Playgroud)

可以在System.IO.Path的.Net Framework参考源中看到

.net

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

在jquery中设置<input type ="date"...的值

不明白为什么这不起作用.我有一个简单的'input type ="date"'字段......

<input type="date" name="Date"/>
Run Code Online (Sandbox Code Playgroud)

而且每当页面加载此函数时,我都会尝试将值设置为今天的日期...

function setDate(date){
    z=$(date).attr('value');

    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth()+1; //January is 0!

    var yyyy = today.getFullYear();
    if(dd<10){dd='0'+dd} 
    if(mm<10){mm='0'+mm} 
    today = yyyy+'-'+mm+'-'+dd;     

    $(date).attr('value',today);
}
Run Code Online (Sandbox Code Playgroud)

我已经完成了正常的调试,我知道这个函数正在被调用,我知道变量'today'实际上确实以'yyyy-mm-dd'的形式保存今天的日期.我尝试过所有不同类型的日期格式(dd/mm/yyyy,dd-mm-yyyy等)

知道为什么这不起作用吗?

html javascript jquery date

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