小编Mar*_*eal的帖子

构造函数可以异步吗?

我有一个Silverlight项目,我试图在构造函数中填充一些数据:

public class ViewModel
{
    public ObservableCollection<TData> Data { get; set; }

    async public ViewModel()
    {
        Data = await GetDataTask();
    }

    public Task<ObservableCollection<TData>> GetDataTask()
    {
        Task<ObservableCollection<TData>> task;

        //Create a task which represents getting the data
        return task;
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到一个错误:

修饰符async对此项目无效

当然,如果我在标准方法中包装并从构造函数中调用它:

public async void Foo()
{
    Data = await GetDataTask();
}
Run Code Online (Sandbox Code Playgroud)

它工作正常.同样,如果我使用旧的由内而外的方式

GetData().ContinueWith(t => Data = t.Result);
Run Code Online (Sandbox Code Playgroud)

这也有效.我只是想知道为什么我们不能await直接在构造函数内调用.可能有很多(甚至是明显的)边缘情况和反对它的理由,我只是想不出来.我也在寻找解释,但似乎找不到任何解释.

c# constructor async-await

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

有没有办法让一个项目在Visual Studio中构建另一个项目?

我们终于在工作中获得了一个源控制系统,我一直负责设置它.我已经读过,通常很好的做法是不在源代码控制中包含二进制文件,所以我没有.但是,我们有两个通用实用程序项目(每个项目都在自己的解决方案中),它们生成实用程序.dll,它们几乎包含在我们所有其他项目中(所有项目都在各自独立的解决方案中).我们从项目中添加对实用程序dll的引用.

我希望我们的解决方案能够以这样的方式设置:如果没有构建引用dll,解决方案将为自己构建dll,就像make文件检查其依赖关系并在它们构建时一样构建它们.重新过时或遗失.

我是新手用VS构建流程,所以尽量保持简单的答案.任何指向一般构建过程概述教程的链接都会很棒.谷歌VS引用返回一堆如何添加引用链接,这不是我想要的.

答案:(3步骤过程)通过右键单击解决方案添加项目引用,而不是二进制引用,并添加现有项目.然后在项目选项卡下,选择项目依赖项并修改项目,以便一个项目依赖于另一个项目.最后,删除对二进制文件的任何旧引用,并使用"添加引用"对话框中的"项目"选项卡重新添加引用.

build-process reference visual-studio

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

我可以使用TargetFileName将文件放在Visual Studio模板中的目录中吗?

我有一个带有基类的.cs文件,我希望在许多项目中使用它.我首先将这个cs文件放在项目文件夹上(在.sln旁边).然后,在项目中,我改变了

<Compile Include="BaseClass.cs">

<Compile Include="..\BaseClass.cs">

这有效,然后文件图标有一个小快捷箭头.


当我想将项目导出为项目模板时,问题出现了.BaseClass不会包含在模板中,因为它位于项目文件夹之外.我已经尝试将BaseClass.cs添加
<ProjectItem ReplaceParameters="true" TargetFileName="..\BaseClass.cs">BaseClass.cs</ProjectItem>
到模板zip并添加到MyTemplate.vstemplate,但我收到错误:
A target file name within the VSTemplate file is invalid, it contains a fully qualified path
如果我删除它..\,它直接包含文件.如果我离开<ProjectItem>.vstemplate文件,只是<Compile Include="..\BaseClass.cs">在模板中放入.csproj文件,它会查找该文件Users/me/AppData/Local....

如何让模板引用项目目录外的文件?

templates visual-studio

7
推荐指数
1
解决办法
1359
查看次数

使用.Net中的私有集初始化属性

public class Foo
{
    public string Name { get; private set;} // <-- Because set is private,
}

void Main()
{
    var bar = new Foo {Name = "baz"}; // <-- This doesn't compile
    /*The property or indexer 'UserQuery.Foo.Name' cannot be used 
      in this context because the set accessor is inaccessible*/

    using (DataContext dc = new DataContext(Connection))
    {
        // yet the following line works.  **How**?
        IEnumerable<Foo> qux = dc.ExecuteQuery<Foo>(
           "SELECT Name FROM Customer");
    }
    foreach (q in qux) Console.WriteLine(q);
} …
Run Code Online (Sandbox Code Playgroud)

c# linq reflection private

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

在 micronaut 应用程序启动时运行代码

我试图找到执行一些启动代码的正确方法,这些启动代码在将 micronaut 作为 servlet 运行时读取并使用 tomcat 的 context.xml 。

我尝试创建一个@Singletonthat implements ApplicationEventListener<ServerStartupEvent>,但是当我的 micronaut 代码被编译并部署为 tomcat 中的 war 文件 servlet 时,它似乎没有被执行。

将 更改@Singleton@Context注释也没有帮助。

文档说这MicronautServletInitializer将注册一个新的bean DefaultMicronautServlet,但它看起来并不是DefaultMicronautServlet一个可以@Replace的bean,它只是将其硬编码在那里。

是否需要一些特殊的东西来触发应用程序事件?

编辑这也不起作用:

package com.mypackage.api;

import io.micronaut.context.event.ApplicationEventListener;
import io.micronaut.context.event.StartupEvent;
import jakarta.inject.Singleton;


@Singleton
//@Context // Doesn't execute with or without
public class SystemUtilsConfig implements ApplicationEventListener<StartupEvent>
{
    @Override
    //@EventListener // doesn't execute with or without
    //@Async // doesn't execute with or without
    public void onApplicationEvent(StartupEvent startupEvent) …
Run Code Online (Sandbox Code Playgroud)

micronaut

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

IEnumerable.Cast没有调用强制转换

我不了解这种方式.Cast有效.我有一个明确的(虽然隐式也失败)演员定义,当我"定期"使用时似乎有效,但当我尝试使用.Cast时却没有.为什么?这是一些可编译的代码,用于演示我的问题.

public class Class1
{
    public string prop1 { get; set; }
    public int prop2 { get; set; }

    public static explicit operator Class2(Class1 c1)
    {
        return new Class2() { prop1 = c1.prop1, prop2 = c1.prop2 };
    }
}

public class Class2
{
    public string prop1 { get; set; }
    public int prop2 { get; set; }
}

void Main()
{
    Class1[] c1 = new Class1[] { new Class1() {prop1 = "asdf",prop2 = 1}};

    //works
    Class2 c2 = (Class2)c1[0];

    //doesn't …
Run Code Online (Sandbox Code Playgroud)

c# linq casting

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

表单get方法在表单提交后删除url参数

我正在为我的脚本制作自定义数据过滤器.除1个过滤器外,一切正常.

我可以选择查看今天的所有数据,如果你去my-url.file.php?view = today

它知道它必须获取今天的所有数据.但是在日期过滤器旁边,我还有其他一些过滤器.哪个可以通过GET(表格)设置

一切正常,但当我正在查看my-url.file.php?view=today并设置(例如)排序过滤器时,它会重定向到?p=5&limit=3&ordersort=orderdesc但应该重定向到?p=5&**view=today**&limit=3&sortby=orderdesc

所以我想..好吧让我通过var设置动作并检查页面今天是否是如此查看...我将把视图放在网址中,否则不会..但它仍会删除此变量

什么是最好的方法来解决这个问题?

<?php
if (isset($_GET['view']) && $_GET['view'] === 'today')
    {
        $action = "adminOrders.php?view=today";
    }
else 
    {
        $action = "adminOrders.php";
    }
?>
<form name="ordermanage" method="get" action="<?php echo $action; ?>">  
  <label>Show &nbsp;
    <select id="form-field-select-1" class="form-control" style="display: inline-block !important;width:100px !important" id="limit" name="limit" onchange="document.ordermanage.submit();">
      <option value="50"  <?php echo (Input::get('limit') == 50) ? 'selected="selected"' : ''; ?>>50</option>
      <option value="100" <?php echo (Input::get('limit') == 100) ? 'selected="selected"' : ''; ?>>100</option>
      <option value="200" <?php echo (Input::get('limit') …
Run Code Online (Sandbox Code Playgroud)

php forms get

0
推荐指数
1
解决办法
2384
查看次数