小编Ani*_*Ani的帖子

使用C#删除换行符

我从数据库字段中获取一个名为'Description'的字符串,它有换行符.它看起来像这样:


物品标题

描述在这里.这是项目的描述.


如何删除换行符.我尝试了以下功能,但它无法正常工作:

public string FormatComments(string comments)
{
    string result = comments.Replace(@"\r\n\", "");
    result = result.Replace(" ", "");
    return result;
}
Run Code Online (Sandbox Code Playgroud)

请建议解决方案.

此致,Asif Hameed

.net c# string c#-3.0 c#-4.0

10
推荐指数
2
解决办法
2万
查看次数

为什么使用IntPtr处理?

使用PInvoke时,我注意到我们需要使用它IntPtr来引用Windows句柄.我想知道为什么不只是int用于手柄?我对句柄的理解是它只是一个整数值.

.net c# winapi c++-cli window-handles

10
推荐指数
2
解决办法
2580
查看次数

检查两个对象实例以查看它们是否相同

我需要比较两个对象,但在一次点击中比较它们的一些属性.这不是为了排序,而是为了确认是否有任何变化; 因为一个是旧保存的实例,第二个是同一事物的新导入实例

我认为通过编写自定义比较器可以获得最佳效果.只是有点困惑,是否要做IComparer,或IComparable,或什么tbh.

谢谢

NAT

c# compare equality properties

9
推荐指数
1
解决办法
3791
查看次数

委托/ lambda打字和强制如何工作?

我已经注意到一些在C#中处理lambda函数和匿名委托时工作和不起作用的事例.这里发生了什么?

class Test : Control {
    void testInvoke() {
        // The best overloaded method match for 'Invoke' has some invalid arguments
        Invoke(doSomething);

        // Cannot convert anonymous method to type 'System.Delegate' because it is not a delegate type
        Invoke(delegate { doSomething(); });

        // OK
        Invoke((Action)doSomething);

        // OK
        Invoke((Action)delegate { doSomething(); });

        // Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type
        Invoke(() => doSomething());

        // OK
        Invoke((Action)(() => doSomething()));
    }

    void testQueueUserWorkItem() {
        // The best …
Run Code Online (Sandbox Code Playgroud)

c# lambda delegates type-inference anonymous-methods

9
推荐指数
1
解决办法
1965
查看次数

动态MemberExpression

我想创建一个只知道字段名称的MemberExpression; 例如:

public static Expression<Func<TModel, T>> GenerateMemberExpression<TModel, T>(string fieldName)
    {
        PropertyInfo fieldPropertyInfo;

        fieldPropertyInfo = typeof(TModel).GetProperty(fieldName);

        var entityParam = Expression.Parameter(typeof(TModel), "e"); // {e}
        var columnExpr = Expression.MakeMemberAccess(entityParam, fieldPropertyInfo); // {e.fieldName}
        var lambda = Expression.Lambda(columnExpr, entityParam) as Expression<Func<TModel, T>>; // {e => e.column}

        return lambda;
    }
Run Code Online (Sandbox Code Playgroud)

上述问题是字段类型必须是强类型的.将"对象"作为字段类型传递不起作用.有没有办法生成这个?甚至动态LINQ似乎也不起作用.

c# linq dynamic expression-trees

9
推荐指数
1
解决办法
7649
查看次数

TextWriterTraceListener跟踪文件太大

我正在使用C#System.Diagnostics.TextWriterTraceListener来打印跟踪.但跟踪文件变得太大(数百MB).我想改变行为TextWriterTraceListener,如果跟踪文件变大,它会将输出写入另一个文件.例如,原始跟踪文件是'output1.txt',如果它大于100MB,则TextWriterTraceListener应写入'output2.txt'.

你遇到过类似的问题吗?有没有优雅的解决方案?

.net c# logging trace rollingfileappender

8
推荐指数
1
解决办法
6313
查看次数

泛型:为什么编译器在这种情况下不能推断出类型参数?

我想写一个扩展方法,它可以在字典上工作,它的值是某种顺序.不幸的是,编译器似乎无法从我对该方法的使用中推断出泛型参数; 我需要明确指定它们.

public static void SomeMethod<TKey, TUnderlyingValue, TValue>
    (this IDictionary<TKey, TValue> dict)
    where TValue : IEnumerable<TUnderlyingValue> { }    

static void Usage()
{
    var dict = new Dictionary<int, string[]>();
    var dict2 = new Dictionary<int, IEnumerable<string>>();

    //These don't compile
    dict.SomeMethod();
    SomeMethod(dict); // doesn't have anything to do with extension-methods
    dict2.SomeMethod(); // hoped this would be easier to infer but no joy


    //These work fine
    dict.SomeMethod<int, string, string[]>();
    dict2.SomeMethod<int, string, IEnumerable<string>>();
}
Run Code Online (Sandbox Code Playgroud)

我意识到类型推断不是一门精确的科学,但我想知道是否有一些基本的"规则"我在这里缺失 - 我不熟悉规范的细节.

  1. 这是推理过程的缺点还是我期望编译器在这种情况下应该"弄明白"不合理(或许是歧义)?
  2. 我可以改变方法的签名,使其同样功能但"可推断"吗?

c# generics type-inference

8
推荐指数
1
解决办法
1511
查看次数

重载的方法组参数会混淆重载决策?

以下调用重载Enumerable.Select方法:

var itemOnlyOneTuples = "test".Select<char, Tuple<char>>(Tuple.Create);
Run Code Online (Sandbox Code Playgroud)

失败并出现歧义错误(为清晰起见,删除了名称空间):

The call is ambiguous between the following methods or properties: 
'Enumerable.Select<char,Tuple<char>>
           (IEnumerable<char>,Func<char,Tuple<char>>)'
and 
'Enumerable.Select<char,Tuple<char>>
          (IEnumerable<char>, Func<char,int,Tuple<char>>)'
Run Code Online (Sandbox Code Playgroud)

我当然可以理解为什么明确指定类型参数会导致歧义(两个都会应用重载),但是在这样做后我没有看到.

对我来说似乎很清楚,目的是调用第一个重载,方法组参数解析为Tuple.Create<char>(char).第二个重载不应该适用,因为没有任何 Tuple.Create重载可以转换为期望的Func<char,int,Tuple<char>>类型.我猜测编译器很困惑Tuple.Create<char, int>(char, int),但它的返回类型是错误的:它返回一个二元组,因此不能转换为相关Func类型.

顺便说一句,以下任何一个使编译器开心:

  1. 为method-group参数指定一个type-argument :( Tuple.Create<char>也许这实际上是一个类型推断问题?).
  2. 使参数成为lambda表达式而不是方法组:x => Tuple.Create(x).(在Select通话中使用类型推断很好).

不出所料,尝试以Select这种方式调用其他重载也会失败:

var itemIndexTwoTuples = "test".Select<char, Tuple<char, int>>(Tuple.Create);
Run Code Online (Sandbox Code Playgroud)

这里的确切问题是什么?

c# method-group overload-resolution c#-4.0

8
推荐指数
2
解决办法
2231
查看次数

DirectoryInfo GetFiles TOP编号

我想只从目录返回10个文件.这可能吗?

DirectoryInfo d = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/xml"));

FileInfo[] files = d.GetFiles("*.xml");
Run Code Online (Sandbox Code Playgroud)

这种方式返回所有 XML文件,但我想得到前十个.

.net c# fileinfo

8
推荐指数
2
解决办法
6530
查看次数

不区分大小写的正则表达式

我想在C#中使用Regex验证电子邮件地址.

我正在使用这种模式:

^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
Run Code Online (Sandbox Code Playgroud)

此模式仅匹配大写字母.例如:

"example@gmail.com" - >返回false."EXAMPLE@GMAIL.COM" - >返回true.

我显然希望第一个例子也会返回true.

注意:我不想使用该RegexOptions.IgnoreCase标志.

我想更改模式本身以匹配第一个示例.我认为我可以在模式的末尾添加一个"/ i"或类似的东西,但它似乎不起作用.我也不喜欢在开头使用"?i".

我怎样才能实现这一目标?

(如果你可以为我重写整个模式,那就太棒了!).

谢谢.

.net c# regex

7
推荐指数
3
解决办法
1万
查看次数