Tag: .net

我怎样才能find调用当前方法的方法?

在C#中login时,如何才能知道调用当前方法的方法的名称? 我知道所有关于System.Reflection.MethodBase.GetCurrentMethod() ,但我想在堆栈跟踪下的这一步。 我已经考虑parsing堆栈跟踪,但我希望find一个更清晰的方法,像Assembly.GetCallingAssembly()但方法。

为什么不从List <T>inheritance?

在计划我的计划时,我经常从一系列的想法开始: 足球队只是一个足球运动员的名单。 因此,我应该用下面的代表: var football_team = new List<FootballPlayer>(); 该列表的sorting表示球员列入名单的顺序。 但是后来我意识到球队也有其他属性,除了球员名单之外,还必须logging下来。 例如,本赛季得分总数,当前预算,统一颜色,代表球队名称的string等。 那么我想: 好吧,一个足球队就像一个球员列表,另外,它有一个名字(一个string )和一个总分数(一个int )。 .NET不提供存储足球队的课程,所以我将自己创build课程。 最相似和最相关的现有结构是List<FootballPlayer> ,所以我将inheritance它: class FootballTeam : List<FootballPlayer> { public string TeamName; public int RunningTotal } 但事实certificate, 一个指引说,你不应该从List<T>inheritance 。 这个指导方针在两方面都让我感到十分困惑。 为什么不? 显然List是以某种方式优化性能的 。 怎么会这样? 如果我扩展List会导致哪些性能问题? 什么会打破? 我看到的另一个原因是List是由Microsoft提供的,我无法控制它,所以在暴露“public API”之后我不能再改变它 。 但我很难理解这一点。 什么是公共API,我为什么要关心? 如果我目前的项目没有,也不可能拥有这个公共API,我可以放心地忽略这个指南吗? 如果我从Listinheritance,事实certificate我需要一个公共API,那么我会遇到什么困难? 为什么它甚至重要? 列表是一个列表。 什么可能改变? 我可能想要改变什么? 最后,如果微软不想让我inheritanceList ,他们为什么不把这个类sealed ? 还有什么我应该使用? […]

使用Thread.Abort()有什么问题

所以我知道你不应该使用 Thread.Abort() 但我从来没有得到一个很好的解释。 是否有性能损失或一些隐藏的陷阱? 我知道你不能忽略/吞下ThreadAbortException(这是有道理的)

如何recursion列出在C#中的目录中的所有文件?

如何recursion列出C#中的目录和子目录中的所有文件?

.NET中的“闭包”是什么?

什么是封闭 ? 我们有他们在.NET? 如果它们确实存在于.NET中,请提供一个代码片段(最好用C#)来解释它? 编辑:我经历了Jon Skeet的文章 ,了解什么是闭包,以及如何在.NET中使用它们。

在.NET中创build一个阻塞队列<T>?

我有一个场景,我有多个线程添加到一个队列和多个线程从同一个队列读取。 如果队列达到特定的大小, 所有填充队列的线程将被阻塞,直到从队列中删除一个项目。 下面的解决scheme是我现在使用的,我的问题是:如何改进? 有没有一个对象已经在我应该使用的BCL中启用这种行为? internal class BlockingCollection<T> : CollectionBase, IEnumerable { //todo: might be worth changing this into a proper QUEUE private AutoResetEvent _FullEvent = new AutoResetEvent(false); internal T this[int i] { get { return (T) List[i]; } } private int _MaxSize; internal int MaxSize { get { return _MaxSize; } set { _MaxSize […]

如何以及何时使用`async`和`await`

从我的理解, async和await的主要事情之一是使代码易于编写和读取 – 但使用它们相当于产卵后台线程来执行长期的逻辑? 我目前正在尝试最基本的例子。 我在内部添加了一些评论。 你能为我澄清吗? // I don't understand why this method must be marked as `async`. private async void button1_Click(object sender, EventArgs e) { Task<int> access = DoSomethingAsync(); // task independent stuff here // this line is reached after the 5 seconds sleep from // DoSomethingAsync() method. Shouldn't it be reached immediately? […]

如何获得一个类的属性列表?

我如何获得一个类的所有属性列表?

.NET String.Format()在数字中为千位添加逗号

我想为一个数字在千位加一个逗号。 String.Format() ?

如何获取代码所在的程序集的path?

有没有办法获得当前代码所在的程序集的path? 我不想要调用程序集的path,只是包含代码的path。 基本上我的unit testing需要读取一些相对于dll的xmltesting文件。 我希望path始终正确parsing,无论testingdll是从TestDriven.NET,MbUnit GUI还是其他的运行。 编辑 :人们似乎误解了我的要求。 我的testing库位于说 C:\项目\ MyApplication的\ daotests \ BIN \debugging\ daotests.dll 我想得到这个path: C:\项目\ MyApplication的\ daotests \ BIN \debugging\ 当我从MbUnit Gui运行时,到目前为止的三个build议都失败了: Environment.CurrentDirectory提供了c:\ Program Files \ MbUnit System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location给出了C:\ Documents and Settings \ george \ Local Settings \ Temp \ …. \ DaoTests.dll System.Reflection.Assembly.GetExecutingAssembly().Location给出与以前相同。