小编chr*_*aut的帖子

为什么我的string.indexof(char)更快?

不要问我是怎么到达那里的,但是我正在玩一些屏蔽,循环展开等.无论如何,出于兴趣,我正在考虑如何实现indexof方法,长话短说,所有掩盖等除此之外,这个天真的实现:

public static unsafe int IndexOf16(string s, int startIndex, char c) {
            if (startIndex < 0 || startIndex >= s.Length) throw new ArgumentOutOfRangeException("startIndex");
            fixed (char* cs = s) {
                for (int i = startIndex; i < s.Length; i++) {
                    if ((cs[i]) == c) return i;
                }
                return -1;
            }
        }
Run Code Online (Sandbox Code Playgroud)

比string.IndexOf(char)快.我写了一些简单的测试,它似乎完全匹配输出.我的机器的一些样品输出数字(当然会有所不同,但趋势很明显):

short haystack 500k runs
1741 ms for IndexOf16
2737 ms for IndexOf32
2963 ms for IndexOf64
2337 ms for string.IndexOf <-- buildin

longer haystack:
2888 ms for IndexOf16
3028 …
Run Code Online (Sandbox Code Playgroud)

c# string performance

16
推荐指数
1
解决办法
1449
查看次数

委托作为扩展方法的第一个参数

女士和男士们,

我最近尝试过这个实验:

static class TryParseExtensions
{
    public delegate bool TryParseMethod<T>(string s, out T maybeValue);
    public static T? OrNull<T>(this TryParseMethod<T> tryParser, string s) where T:struct 
    {
        T result;
        return tryParser(s, out result) ? (T?)result : null;
    }
}

// compiler error "'int.TryParse(string, out int)' is a 'method', which is not valid in the given context"
var result = int.TryParse.OrNull("1");  // int.TryParse.OrNull<int>("1"); doesnt work either

// compiler error: type cannot be infered....why?
var result2 = TryParseExtensions.OrNull(int.TryParse, "2"); 

// works as expected
var …
Run Code Online (Sandbox Code Playgroud)

c# extension-methods delegates

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

使用 Linq 进行“惰性”GroupBy

我最近遇到的情况是,我需要执行一个分组操作,缓慢产生 Linq 查询。

现在,groupBy 失去了它的惰性,这意味着您必须等待整个序列完成,直到返回任何组。对我来说,从逻辑上讲这似乎不是最好的解决方案,因为一旦第一次遇到一个组就可以返回。

我编写了以下代码,它似乎工作得很好,并且正在寻找陷阱和一般改进,以及对概念本身的想法(例如,可以/应该 groupBy 方法尽快返回组)。

public static IEnumerable<KeyValuePair<R, IEnumerable<T>>> GroupByLazy<T, R>(this IEnumerable<T> source, Func<T, R> keySelector)
        {
            var dic = new Dictionary<R, BlockingCollection<T>>();
            foreach (var item in source)
            {
                var Key = keySelector(item);
                BlockingCollection<T> i;
                if (!dic.TryGetValue(Key, out i))
                {
                    i = new BlockingCollection<T>();
                    i.Add(item);
                    dic.Add(Key, i);
                    yield return new KeyValuePair<R, IEnumerable<T>>(Key, i);
                }
                else i.TryAdd(item);
            }
            // mark all the groups as completed so that enumerations of group-items can finish
            foreach (var groupedValues in dic.Values)
                groupedValues.CompleteAdding(); …
Run Code Online (Sandbox Code Playgroud)

c# linq

6
推荐指数
2
解决办法
2275
查看次数

发送电子邮件到雅虎帐户

你如何发送电子邮件到雅虎帐户,我只能发送到Gmail?我想知道为什么因为我的ISP不提供POP3或SMTP地址.我对我的一切都一无所知,如果你能告诉我一个调查的方法,那么我将非常高兴.

    SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
    smtp.UseDefaultCredentials = false;
    smtp.Credentials = new NetworkCredential("pevus55@gmail.com", "mypassword");
    smtp.EnableSsl = true;

    MailAddress mailFrom = new MailAddress("parris797877@yahoo.com");
    MailAddress mailTo = new MailAddress("pevus55@gmail.com");
    MailMessage msg = new MailMessage(mailFrom, mailTo);
    msg.Subject = "Test";
    msg.Body = textBox1.Text;
    smtp.Send(msg);
Run Code Online (Sandbox Code Playgroud)

.net c# java email networking

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

标签 统计

c# ×4

.net ×1

delegates ×1

email ×1

extension-methods ×1

java ×1

linq ×1

networking ×1

performance ×1

string ×1