小编Luk*_*lch的帖子

回车和换行... C#中是否都需要?

将新行字符插入字符串时,我通常会这样做:

str = "First line\nSecond line";
Run Code Online (Sandbox Code Playgroud)

在C#中,这是标准做法吗?我还应该包含'回车'字符'\ r'吗?以下是否有任何区别,如果有,它们是什么?

str = "First line\nSecond line";
str = "First line\r\nSecond line";
Run Code Online (Sandbox Code Playgroud)

如果同时使用'回车'和'换行'是标准做法,是否有特定的订单?为什么?

注意:我在SO上阅读了一些其他帖子,但没有找到特定于.NET/C#的答案.

编辑:测试一个小应用程序后,我没有看到'\n'和'\n\r'或'\ r \n'之间有任何区别.

c# carriage-return linefeed

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

正则表达式 - 查找不以特定前缀开头的所有匹配单词

我如何构造一个正则表达式来查找以字符串结尾但不以字符串开头的所有单词?

例如,在下面的句子中找到所有以'friend'结尾但不以'girl'开头的单词:

" 当他们要求他们成为朋友时,男朋友女朋友找到了一位朋友 "

粗体项应匹配."女朋友"这个词不应该.

regex

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

检查IEnumerable是否具有少于一定数量的项目而不会导致任何不必要的评估?

有时我希望有一定范围的项目,需要进行一些验证以确保我在该范围内.最明显的方法是将集合中的项目数与范围进行比较.

public static bool IsWithinRange<T>(this IEnumerable<T> enumerable, int max)
{
    return enumerable.Count() <= max;
}
Run Code Online (Sandbox Code Playgroud)

虽然,我的理解是linq Count()方法将在返回结果之前评估整个可枚举.理想情况下,我只会对最小数量的项目进行评估以获得我的结果.

在不引起任何不必要评估的情况下,确保可枚举项目少于一定数量的最佳方法是什么?

c# linq

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

我可以停止服务引用生成ArrayOfString而不是string []吗?

我有一个带有这样签名的web方法:

public string[] ToUpper(string[] values)
Run Code Online (Sandbox Code Playgroud)

我在Visual Studio 2010中使用"添加服务引用"来生成对我的服务的引用.不幸的是,这个过程创建了一个名为'ArrayOfString'的代理类,并使用这种类型而不是预期的'string []'类型.生成的异步服务调用签名最终看起来像这样:

public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values) { }
public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values, object userState) { }
Run Code Online (Sandbox Code Playgroud)

我已经尝试了配置服务参考表单中"收集"下拉列表的所有选项,但它似乎并没有什么区别.

这在以前工作,但由于某种原因它可能突然停止工作,可能是从服务中删除另一个Web方法.

如何让生成的服务引用类使用string []类型而不是生成的ArrayOfString类型?任何有关这方面的帮助将不胜感激.

编辑: 正如@Oleg建议的那样,我正在使用ASMX Web服务.

c# web-services proxy-classes asmx

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

使用异常消息属性检查特定错误是不好的做法吗?

有时,异常类型足够独特,可以指示确切的问题,例如ArgumentOutOfRangeException.Othertimes,例外情况更为笼统,可能会因为多种原因而被抛出.在这种情况下,似乎在异常消息属性中找到了唯一的附加信息.

在我目前的情况下,我收到一个抛出错误消息的CommunicationException:

已超出传入邮件的最大邮件大小限额(65536)

由于可能通过CommunicationException抛出多个不同的错误,使用message属性确定原因是不好的做法,如下所示:

catch (CommunicationException ex)
{
    if (Regex.IsMatch(ex.Message, "The maximum message size quota for incoming messages .* has been exceeded"))
    {
        // handle thrown exception
    }
    throw;
}
Run Code Online (Sandbox Code Playgroud)

这些消息在所有系统上都是恒定可靠的吗?是否还有其他考虑因素,例如本地化?

结论:

我使用'CommunicationException'的方案是一个糟糕的例子,因为我后来意识到InnerException属性中存在QuotaExceededException.由于回复,我知道要查找异常中存在的任何数据以指出确切原因.在这种情况下,它是InnerException属性.

关于是否应该使用消息属性来确定原因的问题,除非没有替代方案,否则应该避免应该避免的普遍共识.由于本地化,消息属性值可能不会在不同系统上保持不变.

c# exception-handling exception

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

检查和检索集合的第一项的最佳方法是什么?

我明白这有点微不足道但......

如果存在,那么获取引用的最佳方法是什么?假设集合包含引用类型的项.

代码示例1:

if (collection.Any())
{
    var firstItem = collection.First();
    // add logic here
}
Run Code Online (Sandbox Code Playgroud)

上面的示例在集合上有两个单独的调用,开始迭代,一旦检测到第一个就完成.

代码示例2:

var firstItem = collection.FirstOrDefault();
if (firstItem != null)
{
    // add logic here
}
Run Code Online (Sandbox Code Playgroud)

上面的示例只对集合进行了一次调用,但引入了一个不必要地在更广范围内的变量.

是否存在与此方案相关的最佳实践?有更好的解决方案吗?

c# linq scope

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

你如何处理fetchxml结果数据?

我已经避免使用fetchxml,因为我一直不确定在调用crmService.Fetch(fetchXml)之后处理结果数据的最佳方法.在几种情况下,我使用带有LINQ的XDocument从此数据结构中检索数据,例如:

XDocument resultset = XDocument.Parse(_service.Fetch(fetchXml));
if (resultset.Root == null || !resultset.Root.Elements("result").Any())
{
    return;
}
foreach (var displayItem in resultset.Root.Elements("result").Select(item => item.Element(displayAttributeName)).Distinct())
{
    if (displayItem!= null && displayItem.Value != null)
    {
        dropDownList.Items.Add(displayItem.Value);    
    }
}
Run Code Online (Sandbox Code Playgroud)

处理fetchxml结果数据的最佳方法是什么,以便可以轻松使用.诸如将这些记录传递到ASP.NET数据网格之类的应用程序将非常有用.

xml data-manipulation dynamics-crm fetchxml data-structures

7
推荐指数
2
解决办法
9161
查看次数

Enum类文件名是否应以"Enum"为后缀?

在将类分解为文件时,我想知道仅包含枚举的类文件的命名约定是什么.它们是否应该与枚举名称匹配,就像任何其他类一样,或者它们是否应以"Enum"为后缀,以便开发人员知道该文件只包含枚举?

例如:

namespace MyCompanyName.MyApplication
{
    public enum Colors
    {
        Red,
        Blue,
        Green,
        Yellow
    }
}
Run Code Online (Sandbox Code Playgroud)

你会说包含上面代码的文件应该命名为'Colors.cs'或'ColorsEnum.cs'吗?或者,也许这些文件有另一个可接受的命名约定?

c# filenames enums naming-conventions

7
推荐指数
2
解决办法
3133
查看次数

我可以对使用相同密钥签名的所有程序集显示内部构件吗?

我有一个功能组件,我不想公开,但仍然可以访问我的其他程序集.这可以使用InternalsVisibleToAttribute来完成,方法是指定它将使其内部可见的每个程序集.

我想知道是否有一种方法我不必指定所有引用程序集,而只是强制执行规则,即程序集必须由相同的snk签名才能使内部可见.

这个功能是否存在,如果存在,有人能指出我正确的方向吗?

.net c# internalsvisibleto

6
推荐指数
1
解决办法
1113
查看次数

CRM 2011 - 从已连接的实体中检索FormattedValues

我一直在转换我的一些CRM4.0插件来使用CRM2011 SDK.我刚刚开始使用LINQ for Early-Bound实体并遇到了一个问题.

我试图在连接的实体中获取OptionSetValue的格式化值.在查看此MSDN SDK查询示例后,我设法检索主要实体的格式化值,但似乎无法将其转换为已连接的实体.

下面的代码是我正在尝试实现的示例.我开始使用SDK示例中的代码.

var query_join8 = (from a in sContext.AccountSet
                    join c in sContext.ContactSet
                        on a.PrimaryContactId.Id equals c.ContactId
                        into gr
                    from c_joined in gr.DefaultIfEmpty()
                    select new
                                {
                                    contact_name = c_joined.FullName,
                                    account_name = a.Name,
                                    account_addresstypecode = a.Address1_AddressTypeCode,
                                    account_addresstypename = a.FormattedValues.ContainsKey("address1_addresstypecode") ? a.FormattedValues["address1_addresstypecode"] : null,
                                    account_formattedValues = a.FormattedValues,
                                    contact_addresstypecode = c_joined.Address1_AddressTypeCode,
                                    contact_addresstypename = c_joined.FormattedValues.ContainsKey("address1_addresstypecode") ? c_joined.FormattedValues["address1_addresstypecode"] : null,
                                    contact_formattedValues = c_joined.FormattedValues,
                                }).ToArray();
Run Code Online (Sandbox Code Playgroud)

account_formattedValues和account_addresstypename遇到纠正,我可以访问该数据,但由于某种原因,contact_formattedValues项包含一个空集合,因此contact_addresstypename为null.

我这样做不正确,还是我错过了什么?有没有人能够或知道如何实现这一目标?任何帮助是极大的赞赏.

c# linq early-binding dynamics-crm-2011

5
推荐指数
1
解决办法
4128
查看次数