Tag: c# 3.0

什么是委托以及它如何允许创建对象

如果委托是抽象的,那么它如何允许创建对象

TextTransform.exe似乎只接受旧版本的C#

当我在Visual Studio中扩展T4模板时,我可以使用完整的C#3.0语法,包括LINQ表达式等。当我使用TextTransform.exe在Visual Studio外部扩展它时,它会抱怨LINQ表达式和C#3.0的其他新function。 是否有更新版本的TextTransform.exe? 我正在运行的是: C:\Program Files\Common Files\Microsoft Shared\TextTemplating\1.2\TextTransform.exe

扩展方法和通用约束的问题

我有一个基本接口和几个inheritance的接口。 基本接口有扩展方法,用于修改对象并返回基类的新实例( IChildA.Touch() => IBase , IBase.Touch() => IBase )。 对于一个inheritance路径( IChildB和后代),我想实现返回与调用对象相同类型的对象的扩展方法( IGrandChildB.Touch() => IGrandChild )。 为此,我想指定一个受限于IChildB后代的通用扩展方法。 这工作到目前为止,但现在编译器无法解析来自IChildA的调用。 它尝试使用IChildB路径的扩展方法,而不是使用IBase接口的扩展方法。 有没有一种优雅的方法来解决这个问题? public interface IBase {} public interface IChildA : IBase {} public interface IChildB : IBase {} public static class BaseExtensions { public static IBase Touch(this IBase self) { return self; } public static T Touch(this […]

获取“无法在Null值上调用此方法或属性”错误

更新1: 这条线上引发了exception: client_group_details.Add(new ClientGroupDetails( 原始问题: 我有以下代码,我从数据库的30列数据中删除了数据库中的2列。 每当任何列返回NULL值时,我都会收到错误: public class ClientGroupDetails { public String Col2; public String Col3; public ClientGroupDetails(String m_Col2, String m_Col3) { Col2 = m_Col2; Col3 = m_Col3; } public ClientGroupDetails() { } } [WebMethod()] public List GetClientGroupDetails(string phrase) { var client_group_details = new List(); using (connection = new SqlConnection(ConfigurationManager.AppSettings[“connString”])) { using (command = […]

从文件名中提取日期

我有一种情况需要从文件名中提取日期,文件名的一般模式是[filename_]YYYYMMDD[.fileExtension] 例如“xxx_20100326.xls”或x2v_20100326.csv 以下程序完成了工作 //Number of charecter in the substring is set to 8 //since the length of YYYYMMDD is 8 public static string ExtractDatesFromFileNames(string fileName) { return fileName.Substring(fileName.IndexOf(“_”) + 1, 8); } 有没有更好的选择来达到同样的目标? 我基本上是在寻找标准练习。 我使用的是C#3.0和dotnet framework 3.5 编辑: 我喜欢LC的解决方案和方法。 我用过他的程序 string regExPattern = “^(?:.*_)?([0-9]{4})([0-9]{2})([0-9]{2})(?:\\..*)?$”; string result = Regex.Match(fileName, @regExPattern).Groups[1].Value; 该函数的输入是: “x2v_20100326.csv” 但输出是: 2010而不是20100326 (这是预期的一个)。 谁能请帮忙。

编写具有多种类型的通用扩展方法时的类型推断问题

我正在为IEnumerable编写一个通用扩展方法,用于将对象列表映射到另一个映射对象列表。 这就是我希望该方法工作的方式: IList articles = GetArticles(); return articles.Map(_mappingEngine); 这是方法: public static IEnumerable Map(this IEnumerable list, IMappingEngine engine) { return list.Select(engine.Map); } 但是articles.Map(_mappingEngine); 给出编译错误。 问题是T1的类型推断不起作用。 我必须明确地这样称呼它: articles.Map(_mappingEngine); 如果我创建一个只有一个参数T1的扩展方法,如下所示: public static IEnumerable DummyMap(this IEnumerable list, IMappingEngine engine) { return list; } 然后我可以像这样调用它,而不必指定T1: articles.DummyMap(_mappingEngine); 有没有理由说编译器无法在Map的扩展方法中推断出T1的类型?

如何更改枚举定义而不影响在C#中使用它的客户端

我定义了以下枚举。 我使用下划线,因为这个枚举用于日志记录,我不想通过使用自定义属性产生reflection的开销。我们使用非常繁重的日志记录。 现在要求将“LoginFailed_InvalidAttempt1”更改为“LoginFailed Attempt1”。 如果我更改此枚举,我将不得不在应用程序中更改其值。 我可以用记录SP中的空格替换下划线。 我有什么方法可以改变这一点而不影响整个应用程序。请建议。 public enum ActionType { None, Created, Modified, Activated, Inactivated, Deleted, Login, Logout, ChangePassword, ResetPassword, InvalidPassword, LoginFailed_LockedAccount, LoginFailed_InActiveAccount, LoginFailed_ExpiredAccount, ForgotPassword, LoginFailed_LockedAccount_InvalidAttempts, LoginFailed_InvalidAttempt1, LoginFailed_InvalidAttempt2, LoginFailed_InvalidAttempt3, ForgotPassword_InvalidAttempt1, ForgotPassword_InvalidAttempt2, ForgotPassword_InvalidAttempt3, SessionTimeOut, ForgotPassword_LockedAccount, LockedAccount, ReLogin, ChangePassword_Due_To_Expiration, ChangePassword_AutoExpired }

在C#中删除预编译器指令

我被要求保留一些不像遗产那样的代码,并且它充满了编译器指令,使它几乎不可读并且几乎可维护。 例证: #if CONDITION_1 protected override void BeforeAdd(LogEntity entity) #else protected override void BeforeAdd(AbstractBusinessEntity entity) #endif { #if CONDITON_1 entity.DateTimeInsert = DateTime.Now; #else ((LogEntity) entity).DateTimeInsert = DateTime.Now; #endif base.BeforeAdd(entity); } using指令甚至更漂亮: #if CONDITION_1 using CompanyName.Configuration; #endif #if CONDITION_2||CONDITION_1 using CompanyName.Data; using CompanyName.Data.SqlBuilders; #else using CompanyName.Legacy.Database; using CompanyName.Legacy.Database.SQLBuilders; using CompanyName.Legacy.Database.SQLBuilders.parameterTypes; #endif 我以为我会给ConditionalAttribute一个但是在这种情况下这不会起作用 有什么办法可以解决这个编译指令的噩梦吗? 代码是针对.NET 3.5编译的。 更新: […]

您认为通用属性在.NET中会有用吗?

我不是在讨论声明具有generics参数类型的属性或字段的generics类。 我在谈论可以应用于generics和非generics类的generics属性。 我不是在说这个: public class Base { public T BaseProperty { get; set; } } 我在说这个: public class Base { public T BaseProperty { get { // Insert magic } set { // Insert magic } } } 或这个: public class Base { public T BaseProperty { get { // Insert magic } set { […]

嵌套使用C#Object Initializers

所以,对象初始化器是各种方便的 – 特别是如果你正在做linq,它们是完全必要的 – 但我不能完全弄明白这个: public class Class1 { public Class2 instance; } public class Class2 { public Class1 parent; } 使用这样的: Class1 class1 = new Class1(); class1.instance = new Class2(); class1.parent = class1; 作为初始化者: Class1 class1 = new Class1() { instance = new Class2() { parent = class1 } }; 这不起作用,class1应该是一个未分配的局部变量。 当你做类似的事情时,它在Linq变得更加棘手 select new […]