我有一个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直接在构造函数内调用.可能有很多(甚至是明显的)边缘情况和反对它的理由,我只是想不出来.我也在寻找解释,但似乎找不到任何解释.
我们终于在工作中获得了一个源控制系统,我一直负责设置它.我已经读过,通常很好的做法是不在源代码控制中包含二进制文件,所以我没有.但是,我们有两个通用实用程序项目(每个项目都在自己的解决方案中),它们生成实用程序.dll,它们几乎包含在我们所有其他项目中(所有项目都在各自独立的解决方案中).我们从项目中添加对实用程序dll的引用.
我希望我们的解决方案能够以这样的方式设置:如果没有构建引用dll,解决方案将为自己构建dll,就像make文件检查其依赖关系并在它们构建时一样构建它们.重新过时或遗失.
我是新手用VS构建流程,所以尽量保持简单的答案.任何指向一般构建过程概述教程的链接都会很棒.谷歌VS引用返回一堆如何添加引用链接,这不是我想要的.
答案:(3步骤过程)通过右键单击解决方案添加项目引用,而不是二进制引用,并添加现有项目.然后在项目选项卡下,选择项目依赖项并修改项目,以便一个项目依赖于另一个项目.最后,删除对二进制文件的任何旧引用,并使用"添加引用"对话框中的"项目"选项卡重新添加引用.
我有一个带有基类的.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....
如何让模板引用项目目录外的文件?
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) 我试图找到执行一些启动代码的正确方法,这些启动代码在将 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) 我不了解这种方式.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) 我正在为我的脚本制作自定义数据过滤器.除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
<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) c# ×3
linq ×2
async-await ×1
casting ×1
constructor ×1
forms ×1
get ×1
micronaut ×1
php ×1
private ×1
reference ×1
reflection ×1
templates ×1