小编fhn*_*eer的帖子

我的方法应该抛出自己的异常,还是让.NET抛出文件不存在?

这是我的代码:

public void ReadSomeFile(string filePath)
{
    if (!File.Exists(filePath))
        throw new FileNotFoundException();

    var stream = new FileStream(filePath, ....)
    .....
}
Run Code Online (Sandbox Code Playgroud)

我应该自己抛出异常(见File.Exists支票)吗?如果文件不存在,FileStream则会抛出FileNotFoundException.这里有什么好的编程习惯?代码分析说我们应该验证我们的参数.但是如果我将该参数直接传递给另一个方法(我的或其他代码)并且该方法本身会抛出异常,那么在我的代码中验证参数的优点是什么?

c# exception

75
推荐指数
2
解决办法
4315
查看次数

名称ViewModel在命名空间"clr-namespace:Project.ViewModels"中不存在

现在这是一个真正奇怪的错误.我正在研究WPF应用程序并关注MVVM.在我的MainWindow中,我正在设置视图和查看模型,我得到了这个奇怪的错误.虽然它构建良好,应用程序运行正常,但为什么我收到此错误.

我也跟着一些类似但没有找到合适的答案.我试图重新启动visual studio并清理和重建,但我仍然面临这个错误.

所以这是代码.

<Window x:Class="MyProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:v="clr-namespace:MyProject.Views"
        xmlns:vm="clr-namespace:MyProject.ViewModels"
        xmlns:p="clr-namespace:MyProject.Properties"
        Title="{x:Static p:Resources.Title}" Height="400" Width="750" MinHeight="400" MinWidth="750">
    <Window.Resources>
        <DataTemplate DataType="{x:Type vm:MainPageViewModel}">
            <v:MainPageView/>
        </DataTemplate>
    </Window.Resources>

Error   1   The name "MainPageViewModel" does not exist in the namespace "clr-namespace:MyProject.ViewModels".
Run Code Online (Sandbox Code Playgroud)

这是我的ViewModel

namespace MyProject.ViewModels
{
    public class MainPageViewModel : PropertyChangedBase
    {
        public MainPageViewModel()
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么什么是真正的错误.我顺便使用Visual Studio 2012.

更新: 我的视图模型和视图位于同一个项目中.我没有参考任何其他项目.并且MyProject.ViewModels.MainPageViewModel存在.

wpf mvvm visual-studio-2012

30
推荐指数
7
解决办法
6万
查看次数

DeploymentItem不部署文件

MS unit testing framework用来测试我的C#库.我必须打开一个我正在部署的文件DeploymentItem attribute.但它没有将文件部署到Test部署目录.

在我的Unit-test项目中,我TestFile在这个文件夹中创建了一个文件夹,里面有多个文件,比如a.txt,b.txt.

现在在我的Unit-test类中,我添加了DeploymentItem属性.但文件没有被复制.

这是我的代码.

[TestClass]
[DeploymentItem("TestFile")]
public class CustomLibraryTest
{
    public TestContext TestContext { get; set; }

    [TestMethod]
    [DeploymentItem(@"TestFiles\a.txt")]  // THis should deploy a.txt to test deployment directory
    {
        var path = TestContext.TestDeploymentDir + "a.txt";
        // Now when I debug this unit-test, and open path in explorer,
        // a.txt is not present in "TestResults\Deploy_fhafeez 2013-05-28 13_02_37\Out" folder
    }
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

c# unit-testing deploymentitem vs-unit-testing-framework visual-studio-2012

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

将类的对象转换为另一个对象

我有两个类几乎相同,除了存储在它们中的数据类型.一个类包含所有double值,而other包含所有float值.

class DoubleClass
{
    double X;
    double Y;
    double Z;
}

class FloatClass
{
    float X;
    float Y;
    float Z;
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个DoubleClass,我想转换为FloatClass.

var doubleObject = new DoubleClass();

var convertedObject = (FloatClass)doubleObject; // TODO: This
Run Code Online (Sandbox Code Playgroud)

一种简单的方法是创建一个创建新FloatClass对象的方法,填充所有值并返回它.有没有其他有效的方法来做到这一点.

.net c# type-conversion

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

模拟使用输出参数的函数

我有一个使用输出参数的函数.我怎么能模仿这个功能?

我的功能是:

GetProperties(out string name, out string path, out string extension);
Run Code Online (Sandbox Code Playgroud)

在我的原始代码中,我这样做:

string Name;
string Path;
string Extension;
MyObject.GetProperties(out Name, out Path, out Extension);
Run Code Online (Sandbox Code Playgroud)

现在,我怎么能嘲笑这个?

c# unit-testing moq

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

调用线程无法访问此对象,因为另一个线程拥有它,WPF

我有一个通过插座连接的硬件,

现在我必须每隔5秒检查硬件是否已连接,复选框显示

我已经实现了一个功能:

private static System.Timers.Timer aTimer;
public MainWindow()
{
    InitializeComponent();
    client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client);
    aTimer = new System.Timers.Timer();
    aTimer.AutoReset = true;
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

    aTimer.Interval = 2000;
    aTimer.Enabled = true;
}

private void OnTimedEvent(object source, ElapsedEventArgs e)
{
    if (client.Connected == true)
    {
        Console.WriteLine("Not Connected");
        CheckBox.IsChecked = false;
    }
    else
    {
        Console.WriteLine("Connected");
        CheckBox.IsChecked = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行应用程序时,它会抛出错误.

调用线程无法访问此对象,因为另一个线程拥有它.

我研究并了解了Dispatcher.Invoke但未能在我的代码中实现它.

c# wpf multithreading

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

为gmock自动生成模拟类

我正在使用gmock进行单元测试C++代码.我没有使用gtest框架.我正在使用visual studio 2008的内置测试框架.

现在我的问题是我必须手动将真实类的模拟类写入单元测试.例如,如果我有一个包含5个函数的A类,那么我必须编写带有5个函数的MockAClass.有没有办法自动生成这些类.

class AClass
{
public:
    virtual int AFunction()
    {
        return 5;
    }
    virtual int AFunctionWithArguments(int x)
    {
        return x;
    }



class MockAClass : public AClass
{
public:
    MOCK_METHOD0(AFucntion, int());
    MOCK_METHOD1(AFunctionWithArgument, int(int x));
};
Run Code Online (Sandbox Code Playgroud)

c++ unit-testing visual-studio-2008 googlemock

13
推荐指数
1
解决办法
9441
查看次数

使用MVVM在TreeView中显示实体

我正在按照MVVM模式制作WPF应用程序.在这我使用实体框架,

我的实体结构很简单,它有3个实体:部门,课程,书籍,

一个部门可以有很多课程,一门课程可以有很多书,

现在我想在树视图中显示这个,所以我在wpf中的输出应该是这样的,

Department1

  Course1

    Book1

    Book2

  Course2

    Book3

Department2

  Course

     Book

Department3   
Run Code Online (Sandbox Code Playgroud)

在我的ViewModel中我有EntityContext对象.但我不知道如何在树视图中显示这一点.我怎么能做到这一点.

c# wpf entity-framework mvvm

12
推荐指数
1
解决办法
9909
查看次数

仅过滤c#中的excel文件

我正在使用C#中的Excel工作表,我很惊讶只选择excel表.我尝试了以下代码

OpenFileDialog browseFile = new OpenFileDialog();
browseFile.DereferenceLinks = true;
browseFile.Filter = "Excel|*.xls|Excel 2010|*.xlsx";
// browseFile.Filter = "Link Files (*.lnk)|*.lnk";

browseFile.Title = "Browse Excel file";
if (browseFile.ShowDialog() == DialogResult.Cancel)
Run Code Online (Sandbox Code Playgroud)

使用此代码不仅获得Excel工作表,而且最终获得快捷方式文件.任何人都可以建议我如何限制快捷方式文件.

c#

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

模拟索引属性

我正在使用Moq编写单元测试.我创建了一个模拟对象.现在,当我尝试模拟其属性时,我收到错误"表达式树可能不包含索引属性"

这是我的代码.

public Node GetNode(IMyInterface interface, string itemName)
{
    return interface.Items[itemName];
}
Run Code Online (Sandbox Code Playgroud)

这是单元测试

var expected = new Node();
var itemName = "TestName";
var mock = new Mock<IMyInterface>();
mock.Setup(f => f.Items[itemName]).Returns(expected);
var target = new MyClass();

var actual = target.GetNode(mock.Object, itemName);
Assert.AreEqual(expected, actual);
Run Code Online (Sandbox Code Playgroud)

这条线给了我错误.

mock.Setup(f => f.Items[itemName]).Returns(expected);
Run Code Online (Sandbox Code Playgroud)

我怎么能这个功能.

c# unit-testing moq

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