小编Reb*_*ott的帖子

"T @this"在委托声明中的含义是什么?

我刚刚使用Dustin Campbell的WeakEvent类为项目添加了一个弱事件实现.虽然盲目使用Code I Found On The Internet™通常是一个坏主意,但它的实现要比我之前一起攻击的好得多.到目前为止它似乎运行良好,但为了理解代码,我遇到了以下情况:

public class WeakEventHandler<T, E> : IWeakEventHandler<E>
    where T : class
    where E : EventArgs
{
    private delegate void OpenEventHandler(T @this, object sender, E e);
    ...
Run Code Online (Sandbox Code Playgroud)

我习惯只使用object senderEventArgs args参数声明委托类型,那么该T @this部分实现了什么?显然,这是宣布的东西 WeakEventHandlerT泛型类型,但我从来没有见过@this之前(和谷歌搜索这是可以理解的绝望).

c# generics

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

格式化自定义工具的输出,以便我可以在Visual Studio中双击错误并打开文件

我编写了一个命令行工具,它预处理了许多文件,然后使用CodeDom编译它们.该工具将版权声明和一些进度文本写入标准输出,然后使用以下格式从编译步骤中写入任何错误:

foreach (var err in results.Errors) {
    // err is CompilerError
    var filename = "Path\To\input_file.xprt";
    Console.WriteLine(string.Format(
        "{0} ({1},{2}): {3}{4} ({5})",
        filename,
        err.Line,
        err.Column,
        err.IsWarning ? "" : "ERROR: ",
        err.ErrorText,
        err.ErrorNumber));
}
Run Code Online (Sandbox Code Playgroud)

然后它写入错误的数量,如"14个错误".

这是错误如何出现在控制台中的示例:

Path\To\input_file.xrpt (73,28): ERROR: An object reference is required for the non-static field, method, or property 'Some.Object.get' (CS0120)
Run Code Online (Sandbox Code Playgroud)

当我在VS2008中将其作为自定义工具运行时(通过在我的项目程序集之一的后期构建事件命令行中调用它),错误在错误列表中显示格式很好,每列中都有正确的文本.当我翻转文件名时,会弹出完全限定的路径.行和列与源文件不同,因为预处理很好.唯一突出的是列表中给出的项目是具有后构建事件的项目.

问题是,当我双击错误时,没有任何反应.我原本希望文件在编辑器中打开.

我很清楚地知道Microsoft.VisualStudio.Shell.Interop命名空间,但我认为应该可以通过写入标准输出来实现.

编辑:我注意到了一些问题,并自己解决了这个问题:

  • 滚动文件名时弹出的FQP实际上并不正确,
  • 我正在输出相对于解决方案根路径的路径,
  • 该工具正在另一个文件夹中的项目中调用,
  • VS正在形成相对于调用项目路径的路径

c# msbuild visual-studio-2008 visual-studio

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

无法让网络应用在iPod上脱机工作

我已经编写了一个基本的密码管理器类型的Web应用程序,可以在移动设备上离线运行(在第4代iPod Touch上进行测试).我已经将应用程序添加到主屏幕,当iPod在线并且可以到达服务器时,一切正常.一旦我将iPod置于离线状态,当我打开应用程序时,会出现以下对话框:

无法打开PwdThing

无法打开PwdThing,因为它未连接到Internet

app(passwordthing.html)的单个静态HTML文件指向清单文件:

<html manifest="cache.manifest">
...
Run Code Online (Sandbox Code Playgroud)

cache.manifest文件包含应用程序使用的所有文件(包括jQuery Mobile文件):

CACHE MANIFEST
passwordthing.html
passwordthing.js
...
Run Code Online (Sandbox Code Playgroud)

并且cache.manifest文件设置为text/cache-manifest.htaccess文件中提供:

AddType text/cache-manifest .manifest
Run Code Online (Sandbox Code Playgroud)

所有源文件都在Github上(这个提交是编写时的版本),我已经设置了一个公共服务器来安装它.

为什么我不能让我的应用程序脱机工作?

html jquery html5 web-applications

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

如何使用Cecil查找传递给泛型方法的类型?

我正在尝试使用Cecil来查找使用常规测试接口的泛型方法调用的实例.我无法从中识别泛型类型MethodReference.

我已经设置了一个基本测试:

private interface IAnimal
{
}

private class Duck : IAnimal
{
}

private class Farm
{
    private readonly ICollection<string> _animals = new List<string>();

    public void Add<T>()
    {
        _animals.Add(typeof(T).Name);
    }

    public override string ToString()
    {
        return string.Join(", ", _animals);
    }
}

static Farm FarmFactory()
{
    var farm = new Farm();
    farm.Add<Duck>();
    farm.Add<Duck>();
    farm.Add<IAnimal>();    // whoops
    farm.Add<Duck>();
    return farm;
}

private static void Main(string[] args)
{
    var farm = FarmFactory();
    Console.WriteLine("Farm:");
    Console.WriteLine(farm);

    // Use Cecil to find the …
Run Code Online (Sandbox Code Playgroud)

c# cil mono.cecil

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

使用特定子类型调用时查找特定方法的用法

我正在重构一个庞大的代码库中的讨厌,需要找到一个特定的方法,接受一个相当通用的接口的实例,用该接口的特定实现调用.

例如,在NastyStatic是的DoBadThings(IBusinessObject)方法.我有大约50个IBusinessObject在我的业务库中实现的类,包括DontHurtMe : IBusinessObject.

我怎样才能找到每一个电话NastyStatic.DoBadThings(foo),但只能找到foo一个实例DontHurtMe

编辑:我正在使用某种静态分析工具.在DoBadThings(或类似)中设置动态监视并运行应用程序并不是一个真正的选择.由于我所做的更改,它已经抛出一个异常DontHurtMe,并且有太多的代码路径可以找到所有这些用法(至少在它上线并且我的用户开始抱怨之前).

.net c# refactoring code-analysis

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

绑定元素对ViewModel属性的可见性,具有设计时支持

我有一个使用Caliburn.Micro的WPF应用程序.当我希望应用程序等待在后台完成某些工作时,我希望能够使用阴影和进度环(来自MahApps.Metro)覆盖应用程序.

我现在所拥有的实际上是有效的,但叠加层在设计时始终处于开启状态.我的ShellView窗口看起来像这样:

<Window ...>
    ...
    <Grid>
        ...
        <Rectangle x:Name="waitShadow" Fill="#3f000000" Stroke="Black" StrokeThickness="0" Visibility="{Binding IsWaiting, Converter={StaticResource BooleanToVisibilityConverter}}" Grid.RowSpan="2"/>
        <ContentControl ... Visibility="{Binding IsWaiting, Converter={StaticResource BooleanToVisibilityConverter}}">
            <Controls:ProgressRing ...> <!-- from MahApps.Metro -->
            </Controls:ProgressRing>
        </ContentControl>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

我的ShellViewModel班级有一个公共bool属性IsWaiting,当我把它设置为true阴影和响铃出现,一切都被禁用.当我将它设置为false它去恢复正常,所以绑定工作(我使用Fody用的PropertyChanged插件).唯一的问题是该Visibility属性在设计时没有崩溃.

有没有更好的方法让叠加层在设计时有效?

wpf caliburn.micro fody-propertychanged

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

使用相同的数字填充列表

如何将此代码转换为LINQ?

var TcData = new List<double>();

for(int i=0;i< numberTcs ;++i)
{
    TcData.Add(-1);
}
Run Code Online (Sandbox Code Playgroud)

c# linq

3
推荐指数
1
解决办法
134
查看次数

使WPF控件垂直拉伸

我不能让我的WPF布局工作.我希望ListBox通过锚定到窗口底部来垂直拉伸.它当前只是StackPanel("添加"和"删除"按钮)中控件高度的大小,并调整大小以容纳添加的项目.在WinForms中我会设置ListView.Anchor,Top|Left|Bottom|Right但我不应该活在过去.我已经尝试了很多东西,比如把它放进去DockPanel,把所有东西都装进去Canvas等等,但似乎没有任何影响.

ViewsTestListView

这是我的XAML:

<Window x:Class="FileDropAdmin.ViewsTestListView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:shared="http://schemas.markpad.net/winfx/xaml/shared"
        Title="ViewsTestListView" Height="300" Width="416">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <TextBlock TextWrapping="Wrap" VerticalAlignment="Top" Text="Things:" />
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="4*"/>
                <ColumnDefinition Width="1*"/>
            </Grid.ColumnDefinitions>   

            <ListBox x:Name="Things" DisplayMemberPath="ThingName" SelectedItem="CurrentThing" Grid.Column="0"/>
            <StackPanel Margin="5 0 0 0" VerticalAlignment="Top" Grid.Column="1">
                <Button x:Name="AddThing" Content="Add" Margin="0 0 0 0" VerticalAlignment="Top"/>
                <Button x:Name="RemoveThing" Content="Remove" Margin="0 5 0 0" VerticalAlignment="Top"/>
            </StackPanel>
        </Grid>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

wpf xaml

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

使用 autofac 注册多个 dbcontext

我们在具有 DDD 架构的 asp.net MVC 中应用了 autofac IOC 容器。我们正在尝试使用不同的数据库连接注册两个 dbcontext。但只有最后一个生效。我们正在使用实体框架 4.4.0。这是代码。

var masterDataSettingManager = new SaasDataSettingManager();

if (masterDataSettingManager.LoadSettings() != null)
{
    var masterProviderSettings = masterDataSettingManager.LoadSettings();
    builder.Register(c => masterDataSettingManager.LoadSettings()).As<DataSettings>();
    builder.Register(x => new EfDataProviderManager(x.Resolve<DataSettings>())).As<BaseDataProviderManager>().InstancePerDependency();

    builder.Register(x => (IEfDataProvider)x.Resolve<BaseDataProviderManager>().LoadDataProvider()).As<IDataProvider>().InstancePerDependency();
    builder.Register(x => (IEfDataProvider)x.Resolve<BaseDataProviderManager>().LoadDataProvider()).As<IEfDataProvider>().InstancePerDependency();

    if (masterDataSettingManager != null && masterProviderSettings.IsValid())
    {
        var efDataProviderManager = new EfDataProviderManager(masterDataSettingManager.LoadSettings());
        var dataProvider = (IEfDataProvider)efDataProviderManager.LoadDataProvider();
        dataProvider.InitConnectionFactory();

        var dbProviderFactory = efDataProviderManager.LoadDbProviderFactories();

        builder.Register<IDbContext>(c => new MyDbContext1(masterProviderSettings.DataConnectionString, dbProviderFactory)).InstancePerHttpRequest();
    }
    else
    {
        builder.Register<IDbContext>(c => new MyDbContext1(masterDataSettingManager.LoadSettings().DataConnectionString)).InstancePerHttpRequest();
    }
}

//data layer
var dataSettingsManager = new DataSettingsManager(); …
Run Code Online (Sandbox Code Playgroud)

entity-framework ioc-container autofac

3
推荐指数
1
解决办法
3590
查看次数