小编olf*_*olf的帖子

Regex MatchCollection得到的结果太多了

使用C#和Regex我有一个奇怪的情况:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
MatchCollection collection = Regex.Matches(substr, @"[\d]*");
Run Code Online (Sandbox Code Playgroud)

在我的世界中,上面会给我一个包含6个结果的'集合'的结果.勉强我的集合包含12个结果,每秒结果是{}(空).

我试过把它重写为:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
Regex regex = new Regex(@"[\d]*");
MatchCollection collection = regex.Matches(substr);
Run Code Online (Sandbox Code Playgroud)

但它给了我完全相同的结果.我在这里错过了什么?

我正在使用.Net framework 4.5,C#

c# regex

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

C#中的异步方法不是异步的吗?

创建了以下控制台应用程序后,我有点困惑为什么它似乎同步运行而不是异步运行:

class Program
{
    static void Main(string[] args)
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        var total = CreateMultipleTasks();
        stopwatch.Stop();

        Console.WriteLine("Total jobs done: {0} ms", total.Result);
        Console.WriteLine("Jobs done in: {0} ms", stopwatch.ElapsedMilliseconds);
    }

    static async Task<int> CreateMultipleTasks()
    {
        var task1 = WaitForMeAsync(5000);
        var task2 = WaitForMeAsync(3000);
        var task3 = WaitForMeAsync(4000);

        var val1 = await task1;
        var val2 = await task2;
        var val3 = await task3;

        return val1 + val2 + val3;

    }

    static Task<int> WaitForMeAsync(int ms)
    {
        Thread.Sleep(ms);
        return Task.FromResult(ms); …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task-parallel-library async-await

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

Visual Studio 2012 - Windows 8中的英语错误消息

在Windows 8 Pro(丹麦语)上安装了Visual Studio 2012 Pro.

问题是所有错误消息现在都是丹麦语!我记得早些时候我应该删除丹麦.net框架语言包,但是不再有这样的包了!(如配置visual studio以英文显示错误消息).

那么我现在如何再次收到英文错误消息呢?

windows-8 visual-studio-2012

5
推荐指数
0
解决办法
262
查看次数

尝试通过SMTP发送邮件.没有邮件到达,没有异常错误

问题:制作了一个小型邮件程序,它在我的开发者电脑上完美运行,但投入生产后却失败了.

protected void Page_Load(object sender, EventArgs e)
{
    string smtpHost = ConfigurationManager.AppSettings["SmtpAddress"];
    MailMessage mail = new MailMessage();
    mail.From = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]);
    mail.Sender = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]);
    mail.To.Add(new MailAddress("zzz@xxx.yy"));
    mail.Subject = "Test mail";
    mail.Body = string.Format("Is this mail sent via {0} ?", smtpHost);

    lblMsg2.Text = string.Format("SmtpHost: {0}", smtpHost); ;

    SmtpClient client = new SmtpClient(smtpHost);
    try
    {
        client.Send(mail);
    }
    catch (Exception exception)
    {
        lblMsg3.Text = exception.Message.ToString();
        lblMsg4.Text = exception.InnerException.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

我确实得到了正确的邮件地址和生产服务器上的所有内容,但我的电子邮件收件箱中没有任何内容:-(.我没有收到任何例外.

我尝试在同一台服务器上使用telnet,从那里我可以发送邮件.

我已经尝试安装WireShark,它正在查看服务器上的网卡,当使用telnet时,我确实得到了我怀疑的响应,但是从我的程序中我没有收到任何东西.

编辑2012-03-12 @ 09:46丹麦时间

现在已经更新了代码,看起来像这样

protected void Page_Load(object sender, EventArgs …
Run Code Online (Sandbox Code Playgroud)

c# smtp wireshark

4
推荐指数
1
解决办法
7288
查看次数

最佳实践:通用接口

我做了一个通用的界面,如:

public interface IDatabaseElement<T>
{
  IList<T> GetAll();
  T Get(id);
  void Save(T element);
  void Delete(int id);
}
Run Code Online (Sandbox Code Playgroud)

如果我有两个元素(人和商店)只使用上述方法,那么什么是最佳实践呢?

答:为每个元素创建一个新界面,如:

public interface IPerson : IDatabaseElement<Person> { }
public interface IStore : IDatabaseElement<Store> { }
Run Code Online (Sandbox Code Playgroud)

然后我的课程如下:

public class Person : IPerson { .... }
public class Store : IStore { .... }
Run Code Online (Sandbox Code Playgroud)

当实例化变量时:

IPerson person = new Person();
IStore store = new Store();
Run Code Online (Sandbox Code Playgroud)

或者B:直接使用通用接口,如:

public class Person : IDatabaseElement<Person> { .... }
public class Store : IDatabaseElement<Store> { .... }
Run Code Online (Sandbox Code Playgroud)

当实现变量时:

IDatabaseElement<Person> person …
Run Code Online (Sandbox Code Playgroud)

c#

4
推荐指数
1
解决办法
1297
查看次数