我目前不得不为同事做一些假期替换,并且必须改变他的一些代码.
我发现了很多条件
if (true == variablename) {...}
Run Code Online (Sandbox Code Playgroud)
我只是想知道这个语法有什么特别之处吗?像我们大多数人一样,我会写
if (variablename) {...}
Run Code Online (Sandbox Code Playgroud)
代替.令我恼火的是病情左侧的真实情况.它是否在右侧我会期望同事在布尔条件下没有进展.
是否有任何性能差异或类似的东西通过在开头真实?
我在实体框架中有以下模型:
public class Customer
{
[XmlIgnore]
public virtual ICollection<Customer> Children { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用 web api 序列化它:
public class CustomerController:ApiController {
public HttpResponseMessage GetAll()
{
using (var tc = new DataContext())
{
List<Customer> allCustomers = tc.Customers.ToList();
return Request.CreateResponse(HttpStatusCode.OK, allCustomers);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我这样做并使用 POST 调用该方法时,我收到以下错误:
“ObjectContent`1”类型无法序列化内容类型“application/json”的响应主体;字符集=utf-8
InnerException:“从‘System.Data.Entity.DynamicProxies.Customer’上的‘Children’获取值时出错”
InnerException(2):“ObjectContext 实例已被释放,不能再用于需要连接的操作。”
customer.Children 目前是一个空列表。
我猜这个问题的发生是因为 Children 与 Customer 属于同一类型,导致“无限序列化循环”。(我没有更好的词来形容)
我已经尝试过 XmlIgnore 来防止该属性被序列化,但没有效果。
我有以下代码:(record.sh)
cd $(dirname $0)
dt=$(date '+%d/%m/%Y %H:%M:%S');
echo $dt;
read action < /home/nfs/sauger/web/pi/action.txt
echo $action;
if [[ $action == *"start"* ]]
then
echo "start recording"
./gone.sh
exit 1
elif [[ $action == *"stop"* ]]
then
echo "stop recording"
./gone.sh
exit 1
else
#More stuff done here
fi
Run Code Online (Sandbox Code Playgroud)
当我手动运行此脚本时,输出如下:
19/01/2016 19:07:11
start
start recording
Run Code Online (Sandbox Code Playgroud)
如果通过(root)cronjob运行相同的脚本,则输出如下:
19/01/2016 19:07:01
start
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,文件"action.txt"已经被读取而没有问题(两次都记录了"start"),因此这不应该是权限或错误路径的问题.但是当作为cronjob运行时,不会调用if语句.没有"开始录制".
所以我的问题是:为什么if语句在我手动调用脚本时有效,而不是在通过cron完成时?
当我右键单击一个共享点项目并选择“部署”时,将生成一个wsp文件。
我现在想自动化buildprocsses。我已经使用nant来调用MsBuild。这将构建我的csproj文件。
如何从中获取wsp文件?我读了一些有关ddf文件的文章,但在解决方案中看不到。
我(成功)部署了一些sharepoint2010 - 使用msbuild的Webparts.一切正常,直到我决定改变assemblyVersion.每当我这样做的消息
Web部件错误:无法显示或导入此页面上的Web部件或Web窗体控件.无法找到类型RTContacts,RTContacts,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 2721ba85ef1e4b88或未将其注册为安全.
一个解决方案是保持1.0.0.0,但应该有更好的方法......
也许有趣的是我们使用集中的AssemblyFile作为链接.
清单包含正确的assemblyversion:
<Assemblies>
<Assembly Location="RTContacts.dll" DeploymentTarget="GlobalAssemblyCache">
<SafeControls>
<SafeControl Assembly="RTContacts, Version=1.0.4325.18399, Culture=neutral, PublicKeyToken=2721ba85ef1e4b88" Namespace="RTContacts" TypeName="*" />
</SafeControls>
</Assembly>
Run Code Online (Sandbox Code Playgroud)
当我再次将WebPart添加到该站点时,它会正确显示,但现有的webParts似乎链接到旧版本.
我有一个具有多个值的int数组.我必须向该数组添加一个元素.我会这样解决:
int[] myIntArray=SomeMagicThere();
List<int> intList= myIntArray.ToList();
intList.Add(88);
myIntArray= intList.ToArray();
Run Code Online (Sandbox Code Playgroud)
(这很简单,我有理由不能改变myIntArray的类型)
你会以另一种方式解决它吗?做两个演员阵容感觉有点"脏"
我得到以下代码:
[Column]
public int Id;
Run Code Online (Sandbox Code Playgroud)
当我删除并读取一个括号时,VS 2013会将其更改为:
[Column] public int Id;
Run Code Online (Sandbox Code Playgroud)
我不想要这个.这是ReSharper Added的全新安装.我不确定在哪里更改设置.
我有以下代码:
private void AddMissingValue(ref string[] someArray) {
string mightbemissing="Another Value";
if (!someArray.Contains(mightbemissing)) {
var lst=someArray.ToList();
lst.Add(mightbemissing);
someArray=lst.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这有效(如果遗失的话,将一个项目添加到数组中),我想知道这是否可以以更智能的方式完成?我不喜欢将数组转换两次并为这么简单的任务编写这么多行.
有没有更好的办法?也许使用LinQ?
我有以下词典:
public Dictionary<string,object> Items;
Run Code Online (Sandbox Code Playgroud)
现在我需要获取Dictionary-item 的Value来自特定类型的所有Items .(例如"int")
var intValues = Items.OfType<KeyValuePair<string,int>>
根本行不通.
没有LinQ的代码将是这样的:
var intValues=new Dictionary<string,int>()
foreach (var oldVal in Items) {
if (oldVal.Value is int) {
intValues.add(oldVal.Key, oldVal.Value);
}
}
Run Code Online (Sandbox Code Playgroud)
(更新)我的例子应该显示基本的想法.但是如果可能的话,我会避免创建一个新的Dictionary作为结果.
我使用 Azure Pipelines 来构建我的解决方案。手动构建时,用户可以决定使用哪个构建配置。现在我希望默认值(以及自动触发时的值)根据分支而不同。这是我的(非工作)方法:
name: PR-$(Build.SourceBranchName)-$(Date:yyyyMMdd)$(Rev:.r)
trigger:
- develop
- test
- master
pool:
vmImage: 'windows-latest'
parameters:
- name: BuildConfiguration
displayName: Build Configuration
${{ if eq(variables['Build.SourceBranch'], 'refs/heads/develop') }}:
default: Debug
${{ if eq(variables['Build.SourceBranch'], 'refs/heads/test') }}:
default: Release
${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master') }}:
default: Release
values:
- Debug
- Release
Run Code Online (Sandbox Code Playgroud)
条件部分 ( ${{...}
) 根本不起作用。(* "A template expression is not allowed in this context"
)
还有其他方法可以实现这一点吗?