Tag: 扩展方法

C#扩展方法 – 也接受转义字符的字符串拆分

我想为.NET String类编写扩展方法。 我希望它是Split方法的一个特殊的方法 – 一个采用转义字符来防止在分隔符之前使用转义字符时拆分字符串的方法。 写这个的最好方法是什么? 我很好奇最好的非正则表达式来接近它。 像签名一样的东西…… public static string[] Split(this string input, string separator, char escapeCharacter) { // … } 更新:因为它出现了一个评论,逃避…… 在C#中转义非特殊字符时会出现错误 – CS1009:无法识别的转义序列。 在IE JScript中,转义转义字符。 除非你尝试\ u然后你得到一个“预期的hex数字”错误。 我测试了Firefox,它有相同的行为。 我希望这种方法非常宽容并遵循JavaScript模型。 如果你在非分隔符上转义,它应该“善意”删除转义字符。

扩展枚举,矫枉过正?

我有一个对象需要序列化为EDI格式。 对于这个例子,我们会说它是一辆汽车。 汽车可能不是b / c选项随时间变化的最佳示例,但对于真实对象,Enums永远不会改变。 我有许多枚举,如下所示应用了自定义属性。 public enum RoofStyle { [DisplayText(“Glass Top”)] [StringValue(“GTR”)] Glass, [DisplayText(“Convertible Soft Top”)] [StringValue(“CST”)] ConvertibleSoft, [DisplayText(“Hard Top”)] [StringValue(“HT “)] HardTop, [DisplayText(“Targa Top”)] [StringValue(“TT “)] Targa, } 通过扩展方法访问属性: public static string GetStringValue(this Enum value) { // Get the type Type type = value.GetType(); // Get fieldinfo for this type FieldInfo fieldInfo = […]

为什么扩展方法需要“静态”和“这个”,它们的内存如何分配?

关于扩展方法的一些问题: 为什么扩展方法是静态的? 为什么需要在静态类中声明它们? 这个关键字在扩展方法的参数列表中表示什么? 因为它是一个静态类,“this”关键字在这种情况下如何工作? 对于这些类型的方法,内存分配是如何发生的?

扩展方法解析

我为String编写了一个扩展方法来获取一个char参数, string.Remove(char) 。 但是当我使用它时,它改为调用默认的string.Remove(int)方法。 实际方法的存在不应该比隐式转换具有更高的优先级吗?

ToList()方法在哪里? (IQueryable的)

如果我试试这个,它会起作用: var query = myContextObject.Users.Where(u=>u.Name == “John”); query.ToList(); 我可以调用ToList和许多其他扩展方法。 但如果我试试这个: public List ConvertQueryToList(IQueryable query) { return query.ToList(); } ToList将无法访问,我猜这是因为ToList是一个扩展方法,但那么在第一个例子中如何附加ToList ? 在第二种情况下是否可以访问ToList ?

如何使用Unity解决静态类中的依赖关系?

我有以下扩展方法,它(自然地)存在于静态类中。 public static class MyExtensions { [Dependency] private static IMyDataContext _myDataContext { get; set; } public static void MyExtensionMethod(this MyType myType) { // do stuff _myDataContext.DoAwesomeThing(); } } _myDataContext对象为null 。 通常我会使用UnityContainer来注册类型,但由于这是一个静态类,我不能。 我需要什么来实例化_ myDataContext以便在需要时它不为空?

C#,Linq2SQL:创建谓词以查找多个范围内的元素

假设我的数据库中有一个名为Stuff的东西,名为Id。 从用户那里我得到了一系列选定的Range对象(或者我是从输入中创建它们)和他们想要的ID。 该结构的精简版本如下所示: public struct Range : IEquatable<Range>, IEqualityComparer<Range> { public TA; public TB; public Range(T a, T b) { A = a; B = b; } … } 例如,人们可以得到: var selectedRange = new List<Range> { new Range(1, 4), new Range(7,11), }; 然后我想用它来创建一个谓词,只选择那些之间具有值的东西。 例如,使用PredicateBuilder ,我可以这样做: var predicate = PredicateBuilder.False(); foreach (Range r in selectedRange) { […]

使用reflection检查方法是否为“扩展方法”

作为我的应用程序的一部分,我有一个接收MethodInfo并需要对其执行特定操作的函数,具体取决于该方法是否为“扩展方法”。 我检查了MethodInfo类,我找不到任何显示该方法是扩展名的IsExtension属性或标志。 有谁知道如何从方法的MethodInfo中找到它?

为什么非静态类中的静态方法不能作为扩展方法?

可能重复: 扩展方法要求类是静态的 在.NET中: 为什么非静态类中的静态方法不能作为扩展方法?

LINQ .Cast()扩展方法失败但(类型)对象有效

要在一些LINQ to SQL对象和DTO之间进行转换,我们在DTO上创建了显式的转换运算符。 这样我们就可以做到以下几点: DTOType MyDTO = (LinqToSQLType)MyLinq2SQLObj; 这很好用。 但是,当您尝试使用LINQ .Cast()扩展方法进行强制转换时,它会抛出一个无效的强制转换exception,表示无法将类型Linq2SQLType转换为类型为DTOType。 即以下不起作用 List Names = dbContact.tNames.Cast() .ToList(); 但以下工作正常: DAL.tName MyDalName = new DAL.tName(); DTO.Name MyDTOName = (DTO.Name)MyDalName; 以下也行得正常 List Names = dbContact.tNames.Select(name => (DTO.Name)name) .ToList(); 为什么.Cast()扩展方法会抛出无效的强制转换exception? 我过去曾多次使用.Cast()扩展方法,当你将类似基类型的类型转换为派生类型时,它可以正常工作,但是当对象有一个显式的强制转换操作符时,它就会失败。