当用户使用"Implement Inteface X"上下文菜单功能时,插入的代码被a包围
#region [interfacename] Members
#endregion
Run Code Online (Sandbox Code Playgroud)
对.我总是最后删除这个,有没有办法可以永久关掉它?我快速搜索了片段目录,但不确定这是不是正确的地方.有pp_region.snippet,我想我可以修改,但我感觉会完全关闭#region/#endregion.在我去做重新安装VS的事情之前,我以为我会问这里...
我正在使用c#,如果我这样做的话
DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy H':'mm':'ss' 'tt", null)
Run Code Online (Sandbox Code Playgroud)
返回值总是凌晨4:20 - 使用tt我做错了什么?
谢谢!
我很想知道为什么会这样.请阅读下面的代码示例以及每个部分下面的注释中发出的相应IL:
using System;
class Program
{
static void Main()
{
Object o = new Object();
o.GetType();
// L_0001: newobj instance void [mscorlib]System.Object::.ctor()
// L_0006: stloc.0
// L_0007: ldloc.0
// L_0008: callvirt instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
new Object().GetType();
// L_000e: newobj instance void [mscorlib]System.Object::.ctor()
// L_0013: call instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
}
}
Run Code Online (Sandbox Code Playgroud)
为什么编译器callvirt为第一部分发出a 而call第二部分发出a ?是否有任何理由编译器会发出callvirt非虚方法的指令?如果在某些情况下编译器将callvirt为非虚拟方法发出一个,这会产生类型安全问题吗?
我很好奇为什么C#允许我在某些情况下忽略委托参数而不是其他情况.
例如,这是允许的:
Action<int> action = delegate { Console.WriteLine("delegate"); };
Run Code Online (Sandbox Code Playgroud)
但这不是:
Action<int> action = () => Console.WriteLine("lambda");
Run Code Online (Sandbox Code Playgroud)
有没有办法初始化委托并使用lambda忽略参数?我知道我可以在lambda中添加一个参数并修复前一行,但这更像是一个与编译器有关的学术问题,以及为什么或如何工作.
我有一个IDictionary,现在我想在选择列表中使用这些值.我该怎么做呢?
谢谢.
场景:我有一个基类"MyBase".我有一个自定义属性"MyAttrib"
我这样做:
[MyAttrib(1234)]
class MyClass : MyBase()
{
MyClass()
{
}
}
Run Code Online (Sandbox Code Playgroud)
问题:我能否以任何方式强制从MyBase中获取属性MyAttrib?
我有一个带有以下签名的方法:
void MyMethod(Delegate d){};
void MyMethod(Expression exp){};
void MyMethod(object obj){};
Run Code Online (Sandbox Code Playgroud)
但是,这无法编译:
MyMethod((int a) => a)
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
"Cannot convert lambda expression to type 'object' because it is not a delegate type"
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
编辑:我知道这有效.在我想这种情况下,编译器将lambda表达式编译为delgate.
void MyMethod(Func<int, int> d){};
Run Code Online (Sandbox Code Playgroud)
亲切的问候,
我想知道为什么当C#3.0编译器可以隐式地为同一方法创建委托时,它作为参数传递给泛型函数时无法推断方法的类型.
这是一个例子:
class Test
{
static void foo(int x) { }
static void bar<T>(Action<T> f) { }
static void test()
{
Action<int> f = foo; // I can do this
bar(f); // and then do this
bar(foo); // but this does not work
}
}
Run Code Online (Sandbox Code Playgroud)
我本以为我能够传递foo给bar编译器推断出Action<T>正在传递的函数的签名的类型,但这不起作用.但是我可以Action<int>在foo没有强制转换的情况下创建一个from ,所以有一个合理的原因,编译器也不能通过类型推断做同样的事情吗?
我正在使用C#为我的配置类中的十进制值设置默认值
public class ConfigSection : ConfigurationSection
{
[ConfigurationProperty("paymentInAdvanceAmount", **DefaultValue = 440m**)]
public decimal PaymentInAdvanceAmount
{
get { return (decimal)base["paymentInAdvanceAmount"]; }
set { base["paymentInAdvanceAmount"] = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
但它不会被编译并抛出错误
属性参数必须是常量表达式,typeof表达式
我发现一篇文章说:"这不是一个错误."1000M"只是"新十进制(1000)"的简写,它涉及一个方法调用,这意味着它不被认为是一个常量.只是因为编译让你假装它是一个大部分时间不变,并不意味着你可以一直这样."
现在,我该如何解决它?
c# ×9
delegates ×2
lambda ×2
.net ×1
asp.net-mvc ×1
attributes ×1
c#-3.0 ×1
datetime ×1
decimal ×1
generics ×1
il ×1
parsing ×1
type-safety ×1