Tag: extension methods

您可以添加您调用的扩展方法,如静态方法吗?

据微软称,“扩展方法是一种特殊的静态方法,但它们被称为扩展类型的实例方法”。 有没有办法添加一个它调用的扩展方法,就好像它是一个静态方法? 或者做一些具有相同效果的其他事情? 编辑:我的意思是“调用它就好像它是扩展类上的静态方法”。 抱歉模棱两可。

将一个项添加到IEnumerable 的最佳方法是什么?

这是我如何将一个项添加到IEnumerable对象: //Some IEnumerable object IEnumerable arr = new string[] { “ABC”, “DEF”, “GHI” }; //Add one item arr = arr.Concat(new string[] { “JKL” }); 这很尴尬。 我没有看到像ConcatSingle()这样的方法。 有没有更简洁的方法将单个项添加到IEnumerable对象?

String.IsNullOrBlank扩展方法

我不断检查字符串字段以检查它们是否为空或空白。 if(myString == null || myString.Trim().Length == 0) { throw new ArgumentException(“Blank strings cannot be handled.”); } 为了节省自己的一些输入,可以为String类创建一个具有相同效果的扩展方法吗? 我理解如何为类实例添加扩展方法,但是如何向类添加静态扩展方法呢? if(String.IsNullOrBlank(myString)) { throw new ArgumentException(“Blank strings cannot be handled.”); }

拉开表达式<Func >

我正忙于在Dapper和DapperExtensions之上创建包装器扩展方法。 目前我正在尝试向GetList扩展方法添加过滤,类似于LINQ的Where扩展方法。 我已经看到了这个问题,但似乎我无法实现Marc Gravell所建议的,因为.NET 4.5中没有类型EqualsExpression 。 这是一些演示代码,以帮助解释我的问题: using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using System.Linq.Expressions; using DapperExtensions; namespace Dapper.Extensions.Demo { public class Program { private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings[“DapperDbContext”].ConnectionString; public static IDbConnection Connection { get { return new SqlConnection(ConnectionString); } } public static void Main(string[] args) { […]

使用IDataReader作为IEnumerable 的最佳方法?

我需要在任何像这样的IDataReader实现上使用Linq var c = sqlDataReader.AsEnumerable().Count(); 例: public abstract class Test { public abstract SqlDataReader GetSqlDataReader(); public void Foo() { SqlDataReader sqlDataReader = GetSqlDataReader(); IEnumerable sqlEnumerable = sqlDataReader.AsEnumerable(); var c = sqlEnumerable.Count(); var s = sqlEnumerable.Sum(); SqlDataReader first = sqlEnumerable.First(); var t = first.GetSqlXml(10); } } 写这个的最好方法是什么。 请写下你的代码片段。

为什么必须在静态类中定义C#扩展方法?

我知道C#扩展方法必须是静态的。 我不明白为什么这些扩展不能在非静态类或通用类中定义? 更新:我对此设计决策背后的原因感兴趣。

创建扩展方法以生成打开和关闭标记,如Html.BeginForm()

我想知道是否可以创建一个具有类似于Html.BeginForm()的function和行为的扩展方法,因为它会生成一个完整的Html标记,我可以在标记内具体说明它的内容。 例如,我可以有一个视图: 在我尝试使用此问题中的示例生成的function的上下文中,此function非常有用 这将使我能够为我将要的类型创建容器 <% using(Html.BeginDiv(myType, tag) %> 我意识到这会产生无效的XHTML,但我认为可能有其他好处超过这个,特别是因为这个项目不需要XHTMLvalidationW3C标准。 谢谢 戴夫

Enum上的IEnumerable扩展方法

我有一个枚举(下面),我希望能够使用LINQ扩展方法。 enum Suit{ Hearts = 0, Diamonds = 1, Clubs = 2, Spades = 3 } Enum.GetValues(…)是返回类型System.Array,但我似乎无法访问ToList()扩展或其他任何类型。 我只是想写点像…… foreach(Suit s in Enum.GetValues(typeof(Suit)).Select(x=>x).Where(x=> x != param)){} 有什么我想念的,或者有人可以向我解释为什么这是不可能的? 谢谢。

扩展方法的缺点?

扩展方法是一个非常有用的function,您可以在任何类中添加许多所需的function。 但我想知道是否有任何不利因素可能给我带来麻烦。 有什么意见或建议吗?

C#Count()扩展方法性能

如果在具有Count属性的IEnumerable上调用LINQ Count()扩展方法(例如List ),则Count()方法是否查找该属性并将其返回(而不是通过枚举来计算项目)他们)? 以下测试代码似乎表明它确实: using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace CountSpeedTest { // Output: // List – CLR : 0 ms // Enumerate – CLR : 10 ms // List – Mine: 12 ms // Enumerate – Mine: 12 ms class Program { private const int Runs = 10; private […]