想象一下以下代码:
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#来说很不寻常......
我认为面向对象编程被高估了,但我想学习这个范例.我一直在尝试使用QT 4在PHP 5和C++中执行此操作.不幸的是,我倾向于以结构化方式编程,我不使用很多继承也不使用多个实例.我想我必须学习一种纯粹的面向对象语言,迫使我使用上述功能.
我认为最好的选择可能是学习Ruby.您能否确认或命名更好的替代方案?
我主要在x86-64 Linux上工作.
我有这样的列表
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"之前.
我想做TextBox一个Button内部,像一个DatePicker,但不完全.或者它可以是一个ComboBox内部TextBox,所以你可以切换模式TextBox.
你能帮助我吗?
例如:
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是小数吗?
这个问题来自关于元组的讨论.
我开始考虑元组应该具有的哈希码.如果我们接受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) 有没有办法用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)
但这似乎充其量只是一种解决方法.
我需要一个测试方法的帮助我试着写...
我需要测试用户是否可以显示他的个人资料,但是当我尝试使用我的模拟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();
您能否举例说明如何使用(您最喜欢的)DI框架为WPF应用程序连接MVVM View Models?
您是否会创建一个强连接的View Models层次结构(比如每个嵌套控件的ViewModel是父ViewModel上的属性,并将它绑定到XAML中的嵌套控件的DataContext)或者您将使用某种更抽象的""查看模型"管理器",它维护一些弱连接的层次结构......就像在CAB中一样,也许?
使用Visual Studio 2005,有没有办法将图像列表中的图像导出到PC上的单个文件?使用IDE,我选择图像列表并查看其属性.在"Images"属性中,我启动了Images Collection Editor对话框.我只能添加和删除图像,但我找不到导出列表中已有图像的方法.
为什么?制作原始列表的开发人员离开了我们公司,我需要ASP.NET应用程序的图像(将转换为.jpeg).
感谢您的帮助!