小编Max*_*kin的帖子

Foreach可以抛出InvalidCastException吗?

想象一下以下代码:

class foreach_convert
{
    public static void method2()
    {
        List<IComparable> x = new List<IComparable>();
        x.Add(5);

        foreach (string s in x)
        {
            //InvalidCastException in runtime
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道,为什么这种foreach行为如此...而不是C#?这里发生的是对子类的隐式强制转换,它容易出错,并且似乎在语言的其他任何地方都被禁止.或者我不对吗?

PS我之所以问的原因是我的项目中的类似代码中有一个错误,我曾经在外部库中迭代一个自定义集合,这被称为类似SomeTypeCollection,但实际上提供了一个基类型项集合并且可以包含SomeOtherType.我的错,但仍然没有语言,也没有编译器提供任何明确的提示/警告,这对C#来说很不寻常......

c# foreach language-design

19
推荐指数
2
解决办法
3905
查看次数

寻找纯面向对象的语言

我认为面向对象编程被高估了,但我想学习这个范例.我一直在尝试使用QT 4在PHP 5和C++中执行此操作.不幸的是,我倾向于以结构化方式编程,我不使用很多继承也不使用多个实例.我想我必须学习一种纯粹的面向对象语言,迫使我使用上述功能.

我认为最好的选择可能是学习Ruby.您能否确认或命名更好的替代方案?

我主要在x86-64 Linux上工作.

oop programming-languages

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

C#中的字符串排序问题

我有这样的列表

    List<string> items = new List<string>();
    items.Add("-");
    items.Add(".");
    items.Add("a-");
    items.Add("a.");
    items.Add("a-a");
    items.Add("a.a");

    items.Sort();

    string output = string.Empty;
    foreach (string s in items)
    {
        output += s + Environment.NewLine;
    }

MessageBox.Show(output);
Run Code Online (Sandbox Code Playgroud)

输出回来了

-
.
a-
a.
a.a
a-a
Run Code Online (Sandbox Code Playgroud)

在哪里我期待结果为

-
.
a-
a.
a-a
a.a
Run Code Online (Sandbox Code Playgroud)

知道为什么"aa"不会出现在"aa"之前,其中"a-"出现在"a"之前.

c# sorting string cultureinfo

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

如何在WPF中创建一个带有Button的TextBox?

我想做TextBox一个Button内部,像一个DatePicker,但不完全.或者它可以是一个ComboBox内部TextBox,所以你可以切换模式TextBox.

你能帮助我吗?

wpf xaml textbox

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

双重暗示的目的是什么?

例如:

const decimal dollars = 25.50M;
Run Code Online (Sandbox Code Playgroud)

为什么我们要添加M

为什么不这样做:

const decimal dollars = 25.50;
Run Code Online (Sandbox Code Playgroud)

因为它已经说过decimal,这不是暗示25.50是小数吗?

c#

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

c#如何计算对象的哈希码?

这个问题来自关于元组的讨论.

我开始考虑元组应该具有的哈希码.如果我们接受KeyValuePair类作为元组怎么办?它不会覆盖GetHashCode()方法,所以可能它不会知道它的"子"的哈希码...所以,运行时将调用Object.GetHashCode(),它不知道真实的对象结构.

然后我们可以创建一些引用类型的实例,它们实际上是Equal,因为重载的GetHashCode()和Equals().并使用它们作为元组中的"孩子"来"欺骗"字典.

但它不起作用!运行时以某种方式计算出我们元组的结构并调用我们类的重载GetHashCode!

它是如何工作的?Object.GetHashCode()的分析是什么?

当我们使用一些复杂的密钥时,它会在某些不好的情况下影响性能吗?(可能,不可能的情况......但仍然)

以此代码为例:

namespace csharp_tricks
{
    class Program
    {
        class MyClass
        {
            int keyValue;
            int someInfo;

            public MyClass(int key, int info)
            {
                keyValue = key;
                someInfo = info;
            }

            public override bool Equals(object obj)
            {
                MyClass other = obj as MyClass;
                if (other == null) return false;

                return keyValue.Equals(other.keyValue);
            }

            public override int GetHashCode()
            {
                return keyValue.GetHashCode();
            }
        }

        static void Main(string[] args)
        {
            Dictionary<object, object> dict = new Dictionary<object, object>();

            dict.Add(new KeyValuePair<MyClass,object>(new MyClass(1, …
Run Code Online (Sandbox Code Playgroud)

c# hash internals

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

CodeDom泛型类型约束

有没有办法用CodeDom生成类约束.

因为当我使用类似的东西

var method = new CodeMemberMethod();
var genericParam = new CodeTypeParameter("InterfaceType");
genericParam.Constraints.Add("class");
method.TypeParameters.Add(genericParam);
Run Code Online (Sandbox Code Playgroud)

生成的代码就像

private InterfaceType GetImpl<InterfaceType>()
    where InterfaceType : @class
{
}
Run Code Online (Sandbox Code Playgroud)

我发现最好的解决方法是在课前使用前导空格

genericParam.Constraints.Add(" class");
Run Code Online (Sandbox Code Playgroud)

但这似乎充其量只是一种解决方法.

c# generics codedom

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

为什么Moq-mocked方法返回null?

我需要一个测试方法的帮助我试着写...

我需要测试用户是否可以显示他的个人资料,但是当我尝试使用我的模拟GetProfileFromUserName方法时遇到错误.方法返回null.我不明白的是,我有一个名为GetEmail的类似方法,它基本上做同样的工作.

这是检索配置文件的代码,它不起作用:

mockUserRepository.Setup(gp => gp.GetProfileFromUserName(userProfile.UserName)).Returns(new Profile { ProfileID = userProfile.ProfileID });
Run Code Online (Sandbox Code Playgroud)

这是用于检索电子邮件的代码,该代码有效.

mockUserRepository.Setup(em => em.GetEmail(new MockIdentity("JohnDoe").Name)).Returns("johndoe@gmail.com");
Run Code Online (Sandbox Code Playgroud)

这是模拟调用的方法的片段,并返回null而不是配置文件:

public ActionResult ShowProfile()
    {
        var profile = _userRepository.GetProfileFromUserName(User.Identity.Name);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如果我将GetProfileFromUserName中的userProfile.UserName替换为It.IsAny();

null moq

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

如何在WPF应用程序中组合MVVM和依赖注入?

您能否举例说明如何使用(您最喜欢的)DI框架为WPF应用程序连接MVVM View Models?

您是否会创建一个强连接的View Models层次结构(比如每个嵌套控件的ViewModel是父ViewModel上的属性,并将它绑定到XAML中的嵌套控件的DataContext)或者您将使用某种更抽象的""查看模型"管理器",它维护一些弱连接的层次结构......就像在CAB中一样,也许?

c# wpf dependency-injection mvvm

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

如何从VS2005中的图像列表导出图像?

使用Visual Studio 2005,有没有办法将图像列表中的图像导出到PC上的单个文件?使用IDE,我选择图像列表并查看其属性.在"Images"属性中,我启动了Images Collection Editor对话框.我只能添加和删除图像,但我找不到导出列表中已有图像的方法.

为什么?制作原始列表的开发人员离开了我们公司,我需要ASP.NET应用程序的图像(将转换为.jpeg).

感谢您的帮助!

.net imagelist

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