Tag: .net

如何检测我是否在控制台中运行

是否有一种简单的方法可以让代码库自动检测是否从控制台应用程序或Windows应用程序调用它? 我希望我的库不报告Windows事件日志,如果它是从控制台窗口调用,而是报告到控制台窗口。 但是,如果它不在控制台窗口中运行,则应报告给Windows事件日志。 我考虑过要求我的日志记录组件传递日志目标,但是如果它本身可以自动处理这两个目标那么它会很整洁。 我还没有需要像log4net这样广泛的东西,事实上,如果有必要提供支持来记录数据库/文件和其他未知的日志记录目标,那么我可能会推荐这样的解决方案。 现在,只是让我的组件自动检测环境并根据环境登录到控制台或事件日志就足够了。

用户控件的开始和结束标记之间不允许有内容

我想构建一个用户控件,假设MyDiv.ascx。 这个控件呈现div标签,并在诸如添加少量属性之类的东西之后做更多代码,这在这里不是问题。 问题是我希望用户控件的开始和结束标记之间的文本。 例如: 文本与其他一些HTML标签一起使用。 所以当做这样的事情时,我在运行网站时遇到了解析错误。 另外VS2008通过说“ 元素 MyDiv 的开始和结束标签之间不允许内容 ”来警告我。 问题1:我可以做这样的事情,即用户控件的开始和结束标签之间的文本/标记吗? 问题2:如果是,如何

使用lock语句在C#中进行递归/嵌套锁定

可能重复: C#中的重入锁定 我在这里看过StackOverflow和MSDN ,并且无法相信我在互联网上找不到这个问题。 假设我有一个私有成员的课程,我想在几个公共方法中访问。 这些公共方法将由​​不同的线程调用,因此需要同步。 public class MyClass { private Object SomeSharedData = new Object(); public void MethodA() { lock( SomeSharedData) { // do something MethodB(); } } public void MethodB() { lock( SomeSharedData) { // do something } } } 请注意,MethodA和MethodB可以由此类的用户调用,但MethodA也调用MethodB,这会导致嵌套锁定条件。 这保证是安全的吗? 换句话说,.NET是通过引用计数锁来处理这个,所以当我弹出这些方法时,锁会减少吗? 或者.NET在幕后执行一些魔术,它只是忽略了源自同一线程的对象上的所有后续锁定?

C#:如何实现IOrderedEnumerable

我想为练习实现一些不同的算法,只是为了看看我到底有多糟糕并且变得更好:p 无论如何,我想我会尝试使用IEnumerable和IOrderedEnumerable以及其他.Net集合类型来兼容(这样我写的东西以后可以更容易使用)。 但是除了使用OrderBy和ThenBy扩展方法之外,我找不到返回IOrderedEnumerable实例的方法。 所以我想我必须创建自己的类来实现这个接口。 但说实话,界面对我来说并不合理。 可能,但我不确定。 我创建了一个空类,添加了接口,然后让ReSharper为我添加空实现。 它看起来像这样: class MyOrderedEnumerable : IOrderedEnumerable { /// /// Performs a subsequent ordering on the elements of an according to a key. /// /// /// An whose elements are sorted according to a key. /// /// The used to extract the key for each element.The used to compare keys […]

从控制台读取unicode

我试图从C#中的控制台读取unicode字符串,例如,让我使用他的: C:\ SVN \D³ebugger的\ src \виталик\的Program.cs 起初我刚试过Console.ReadLine() ,它返回给我c:\SVN\D3ebugger\src\???????\Program.cs 我已经尝试将Console.InputEncoding设置为UTF8,因为Console.InputEncoding = Encoding.UTF8但是返回了我c:\SVN\D³ebugger\src\???????\Program.cs ,基本上是在c:\SVN\D³ebugger\src\???????\Program.cs西里尔字母串的一部分。 所以随机磕磕绊绊我尝试设置这样的编码, Console.InputEncoding = Encoding.GetEncoding(1251); 它返回了c:\SVN\D?ebugger\src\виталик\Program.cs ,这次破坏了³字符。 此时似乎通过切换InputStream的编码 ,我一次只能获得一种语言。 我也尝试过去做这样的事情: // Code public static string ReadLine() { const uint nNumberOfCharsToRead = 1024; StringBuilder buffer = new StringBuilder(); uint charsRead = 0; bool result = ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), buffer, nNumberOfCharsToRead, out charsRead, (IntPtr)0); // Return the input […]

无情地比较C#中的字符串

假设我有两个字符串:a和b。 为了比较在忽略大小写时a和是否具有相同的值,我总是使用: // (Assume a and b have been verified not to be null) if (a.ToLower() == b.ToLower()) 但是,使用Reflector,我在.NET Framework中已经看过几次: // (arg three is ignoreCase) if (string.Compare(a, b, true) == 0) 我测试哪个更快, ToLower() Compare()每次都用我使用的字符串击败Compare() 。 是否有理由Compare()而不是ToLower() ? 关于不同CultureInfo事情? 我在挠头。

如何在c#中替换两个字符之间的文本

我有点困惑写正则表达式找到两个分隔符之间的文本{}并用c#中的另一个文本替换文本,如何替换? 我试过这个。 StreamReader sr = new StreamReader(@”C:abc.txt”); string line; line = sr.ReadLine(); while (line != null) { if (line.StartsWith(“<")) { if (line.IndexOf('{') == 29) { string s = line; int start = s.IndexOf("{"); int end = s.IndexOf("}"); string result = s.Substring(start+1, end – start – 1); } } //write the lie to console window Console.Write […]

从C#读取性能计数器:指定类别中不存在实例

我正在尝试从另一个.NET 4应用程序中运行的.NET 4应用程序中读取许多性能计数器。 某些计数器,例如Process\% Processor Time和Process\Private Bytes工作正常。 但是,只要我尝试从其中一个.NET类别(例如.NET CLR Memory\# Gen 0 Collections读取性能计数器,就会出现以下exception: Instance ‘MyApplication’ does not exist in the specified Category 我打电话的时候: new PerformanceCounterCategory(“.NET CLR Memory”).GetInstanceNames() 它返回一组非常小的实例,MyApplication确实不在列表中。 但是,当我在perfmon查看我的性能计数器时,我在同一类别/计数器中看到的实例列表要长得多,并且包括MyApplication。 有谁知道为什么我的应用程序看不到.NET计数器? (注意:受监视的应用程序由监视应用程序启动 ,因此它们肯定在同一用户帐户中运行。我还尝试以管理员身份启动我的监视应用程序并将我的帐户添加到Performance Monitor Users组,但不起作用。)

如何在C#中创建通用数字解析器?

要将字符串解析为int,可以调用Int32.Parse(string) ,double, Double.Parse(string) ,long, Int64.Parse(string)等等。 是否可以创建一个使其成为通用的方法,例如, ParseString(string) ? 其中T可以是Int32 , Double等。我注意到类型的数量没有实现任何公共接口,并且Parse方法没有任何公共父级。 有没有办法实现这个或类似的东西?

C# – TextBoxvalidation

我有一些代码可以检查并确保当用户在字段中输入时,必须输入1到10之间的整数。 虽然如果用户关注该字段,那么“坏”数据(例如“fdgfdg”)仍然留在该字段中。 因此,有些人可以certificate当焦点在场上丢失时,如果数据无效,则输入默认值,例如5 private void textBox4_TextChanged(object sender, EventArgs e) { try { int numberEntered = int.Parse(textBox4.Text); if (numberEntered 10) { MessageBox.Show(“You must enter a number between 1 and 10”); } } catch (FormatException) { MessageBox.Show(“You need to enter an integer”); } }