小编Bri*_*ian的帖子

C#中的谓词代表

你能解释一下:

  • 什么是谓词代表?
  • 我们应该在哪里使用谓词?
  • 使用谓词时的任何最佳实践?

描述性源代码将不胜感激.

.net c# predicate

251
推荐指数
6
解决办法
12万
查看次数

为什么我不能从异步代码中捕获异常?

我读到它的任何地方都说下面的代码应该可行,但事实并非如此.

public async Task DoSomething(int x)
{
   try
   {
      // Asynchronous implementation.
      await Task.Run(() => {
      throw new Exception();
      x++;
      });
   }
   catch (Exception ex)
   {
      // Handle exceptions ?
   }
}
Run Code Online (Sandbox Code Playgroud)

也就是说,我没有抓到任何东西,并且在"投掷"线上得到一个"未处理的例外".我在这里很无能为力.

.net c# c#-5.0

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

模拟数据库事务?

我有一对父/子关系的表 - 事件和事件详细信息.我有一个viewmodel,包含来自这两个表的信息.我有一个业务层方法,它传递一个需要更新两个表的viewmodel实例.

所以,在这个方法中,我使用EF6的新事务机制:

using (var transaction = this.db.Database.BeginTransaction())
{
    try
    {
        // various database stuff
        this.db.SaveChanges();
        // more database stuff
        this.db.SaveChanges();
        // yet more database stuff
        this.db.SaveChanges();

        transaction.Commit();
    }
    catch (Exception ex)
    {
        transaction.Rollback();
        this.logger.logException(ex, "Exception caught in transaction, rolling back");
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,我的问题.我该如何测试?

我正在使用微软的单元测试框架,使用Moq,我在模拟DBContexts和DbSet <>时没有遇到任何麻烦,但我似乎无法弄清楚如何绕过事务的东西.

如果我不尝试模拟事务,我会得到一个InvalidOperationException:

"在应用程序配置文件中找不到名为xxx的连接字符串."

这很有道理 - 没有应用程序配置文件,也没有任何数据库.

但是如果我尝试模拟BeginTransaction(),我会得到初始化错误:NotSupportedException:

"非虚拟成员的设置无效:m => m.Database.BeginTransaction".

这让我追逐杂草,看着.NET方法的反编译,试图找出一些可能来自可用接口的类,或者某些东西,我可以以某种方式注入一个模拟对象.

我不是要对MS的事务代码进行单元测试 - 我只是想确保对每个表中的相应记录进行适当的更改.但就其而言,它看起来像是不可测试的,并且任何使用事务的方法都是不可测试的.这只是一种痛苦.

我用Google搜索过,没有发现任何有用的东西.有没有人遇到过这个问题?任何人都有关于如何进行的想法?

c# unit-testing entity-framework moq asp.net-mvc-4

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

在EPPlus中编写Excel文件

我已经坚持了几天,尽管有各种帮助,但这些解决方案都没有为我工作.我想要做的是使用EPPlus库创建一个excel文件,其中包含一些我从存储过程中提取的基本数据.这是我在ExportDocument.cs文件中的代码:

public static ExcelPackage CreateExcelDocument(int [] arr)
{
    String path = @"D:\temp\testsheet3.xlsx";
    //FileInfo newFile = null;
    /*if (!File.Exists(path + "\\testsheet2.xlsx"))
    newFile = new FileInfo(path + "\\testsheet2.xlsx");
    else
        return newFile;*/
    using (ExcelPackage package = new ExcelPackage())
    {
        ExcelWorksheet ws = package.Workbook.Worksheets.Add("testsheet");
        ws.Cells["B1"].Value = "Number of Used Agencies";
        ws.Cells["C1"].Value = "Active Agencies";
        ws.Cells["D1"].Value = "Inactive Agencies";
        ws.Cells["E1"].Value = "Total Hours Volunteered";
        ws.Cells["B1:E1"].Style.Font.Bold = true;

        int x = 2;
        char pos = 'B';
        foreach (object o in arr)
        {
            String str = pos …
Run Code Online (Sandbox Code Playgroud)

c# epplus

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

如何在txt文件中保存异常?

public DataTable InsertItemDetails(FeedRetailPL objFeedRetPL)
{
    DataTable GetListID = new DataTable();
    try
    {
        SqlParameter[] arParams = new SqlParameter[4];

        arParams[0] = new SqlParameter("@Date", typeof(DateTime));
        arParams[0].Value = objFeedRetPL.requestdate;

    }
    catch (Exception ex)
    {
        string dir = @"C:\Error.txt";  // folder location
        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
            File.AppendAllText(Server.MapPath("~/Error.txt"), "Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" + ex.StackTrace +
       "" + Environment.NewLine + "Date :" + DateTime.Now.ToString());
            string New = Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine;
            File.AppendAllText(Server.MapPath("~/Error.txt"), New);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我想在"C:\"中保存一个异常..我正在尝试在DAL ...如何在C驱动器中保存异常Error.txt

c# asp.net exception try-catch c#-4.0

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

在数组中查找重复的整数并显示它们出现的次数

我正在编写一个代码,用于打印出数组中重复的整数及其出现次数.我不允许使用LINQ,只是一个简单的代码.我想我是如此接近但对如何获得正确的输出感到困惑:

class Program
{
    static void Main(string[] args)
    {              
        int[] array = { 10, 5, 10, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12 };
        int count = 1;
        for (int i = 0; i < array.Length; i++)
        {
            for (int j = i; j < array.Length - 1 ; j++)
            {

               if(array[j] == array[j+1])
                  count = count + 1;
            }
            Console.WriteLine("\t\n " + array[i] + "occurse" + count);
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# arrays duplicates

20
推荐指数
4
解决办法
9万
查看次数

在C#中获取最后/下周的星期三日期

我将如何在周三和下周周三的C#日期上周获得:

public Form1()
{
   InitializeComponent();
   CurrentDate.Text = "Today's Date: " + DateTime.Now.ToString("dd/MM/yyyy");
   CurrentRent.Text = "Current Rent Date: "; // last wednesday
   NextRent.Text = "Next Rent Date: "; // next wednesday
}
Run Code Online (Sandbox Code Playgroud)

c#

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

比a = a + 5快+ = 5?

我目前正在学习C#中的运算符和表达式,我明白如果我想将变量的值增加5,我可以用两种不同的方式来实现:a = a + 5a += 5.显然,第二种方式更容易,写得更快,阅读更愉快.但是,从计算机的角度来看,a += 5速度要快a = a + 5吗?编译和执行的时间是否比表达式的较长版本少?

c# expression operators

13
推荐指数
2
解决办法
389
查看次数

如何在C#中获取使用流生成的文件的名称?

我正在使用XAML/C#构建Windows 8 metro应用程序.我正在使用流保存.xml文件我的数据结构,如下所示:

XmlSerializer serializer = new XmlSerializer(typeof(MyObjectType));

using (var stream = await App.LocalStorage.OpenStreamForWriteAsync(MyObject.Title + ".xml", Windows.Storage.CreationCollisionOption.GenerateUniqueName))
    serializer.Serialize(stream, MyObject);
Run Code Online (Sandbox Code Playgroud)

哪里:

App.LocalStorage
Run Code Online (Sandbox Code Playgroud)

显然是一个StorageFolder对象设置为

Windows.Storage.ApplicationData.Current.LocalFolder
Run Code Online (Sandbox Code Playgroud)

设置GenerateUniqueName选项是为了避免冲突,因为我的对象可以具有相同的标题.现在,我需要获取我的流生成的文件名,我该如何获取它?

谢谢

c# filestream

10
推荐指数
1
解决办法
236
查看次数

查找WebElements,最佳实践

在我们当前的自动化(使用Selenium/WebDriver/Java)中,我们使用@FindBy 非常广泛.例如:

@FindBy(css="a[name='bcrumb']")    protected List<WebElement> breadCrumbLinks;
@FindBy(id="skuError")         protected WebElement skuError;  
@FindBy(className="reducedPrice")  protected List<WebElement> reducedPrice;
@FindBy(partialLinkText="Injinji RUN 2.0")  protected WebElement playButton;
@FindBy(linkText="annual member refund")    protected WebElement annualMemberRefund;
@FindBy(xpath="//li[@itemprop='price']")    protected WebElement productPrice;
Run Code Online (Sandbox Code Playgroud)

根据定义,@FindBy可以使用以下命令定位选择器:using,id,name,className,css,tagName,linkText,partialLinkText和xpath.

最近,我们的前端开发人员建议我们实现一个以'test ='开头的新属性类.我认为这是一个好主意,因为我们可以通过查找文本的模糊来找到WebElements,而不是@FindBy本身使用的值.我的问题是,这将是更好地扩大现有功能@FindByOR,创建搜索,我们在我们的测试中使用WebElements的一种新的方式?

java selenium automation ui-automation selenium-webdriver

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