where T : struct
Run Code Online (Sandbox Code Playgroud)
我们C#开发人员都知道C#的基础知识.我的意思是声明,条件,循环,运算符等.
我们中的一些人甚至掌握了Generics,匿名类型,lambdas,LINQ等......
但是C#粉丝,瘾君子,专家几乎都不知道C#最隐藏的功能或技巧是什么?
yield
由迈克尔·葡萄汁var
由迈克尔·葡萄汁using()
kokos的声明readonly
由kokosas
由迈克·斯通as
/ is
由埃德Swangrenas
/ is
(改进)由Rocketpantsdefault
由deathofratsglobal::
通过pzycomanusing()
由块AlexCusevolatile
作者:JakubŠturcextern alias
作者:JakubŠturc什么是关闭?我们在.NET中有它们吗?
如果它们确实存在于.NET中,您能否提供一个代码片段(最好用C#)来解释它?
编辑:我浏览了Jon Skeet的文章,了解什么是闭包以及如何在.NET中使用它们.
这段代码
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
internal class Program
{
public static void Main()
{
var values = new[] {1, 2, 3, 3, 2, 1, 4};
var distinctValues = GetDistinctValuesUsingWhere(values);
Console.WriteLine("GetDistinctValuesUsingWhere No1: " + string.Join(",", distinctValues));
Console.WriteLine("GetDistinctValuesUsingWhere No2: " + string.Join(",", distinctValues));
distinctValues = GetDistinctValuesUsingForEach(values);
Console.WriteLine("GetDistinctValuesUsingForEach No1: " + string.Join(",", distinctValues));
Console.WriteLine("GetDistinctValuesUsingForEach No2: " + string.Join(",", distinctValues));
Console.ReadLine();
}
private static IEnumerable<T> GetDistinctValuesUsingWhere<T>(IEnumerable<T> items)
{
var set=new HashSet<T>();
return items.Where(i=> set.Add(i));
}
private static IEnumerable<T> GetDistinctValuesUsingForEach<T>(IEnumerable<T> …
Run Code Online (Sandbox Code Playgroud) 我有一个问题,我希望向委托添加函数调用,但每个函数调用都有一个唯一的参数。我无法弄清楚或在其他地方找到解决方案,所以我转向你们:)
下面一些伪..
(所以基本上,我正在创建一个委托和一个事件,并且 AddToDelegate 函数应该将函数调用添加到事件(具有唯一值),然后 GetData 函数返回一个字符串中的所有响应 -问题出在AddToDelegate 函数作为该行a += new A(SomeFunc)(i.ToString());
实际上应该只是一个+= new A(SomeFunc);
)
有没有办法与代表一起做到这一点 - 或者我是否在错误的树上咆哮?
public delegate string A(string s);
public event A a;
public void AddToDelegate()
{
for (int i = 0; i < DelegateList.Length; i++)
{
a += new A(SomeFunc)(i.ToString());
}
}
public string GetData()
{
StringBuilder _sb = new StringBuilder();
if (a != null)
{
Delegate[] DelegateList = a.GetInvocationList();
for (int i = 0; i < DelegateList.Length; i++)
{
_sb.Append(((A)DelegateList[i])); …
Run Code Online (Sandbox Code Playgroud) 我的意思是我有一个这样的方法:
public static void CrossThreadUpdate<T1, T2, T3>(this Form form, Action<T1, T2, T3> action, object[] parms)
{
form.BeginInvoke(action, parms);
}
Run Code Online (Sandbox Code Playgroud)
但我不想创建相同的功能,因为<T1>, <T1, T2>, <T1, T2, T3>, <T1, T2, T3, T4>, etc.
我正在想象类似于Foo(params string[] bar)
.