javascript

java

python

c#

node.js

reactjs

android

php

c++

ruby-on-rails

html

jquery

git

css

ios

sql

.net

c

<img src="//i.stack.imgur.com/bk9VA.png" alt="" class="sponsor-tag-img" width="18" height="16"/>android

string

c# - 如何将ScrollBar添加到Stackpan

在我的WPF应用程序中,我有一个包含几个控件的Stackpanel。 如何将滚动条添加到此堆栈面板。

trans by 2019-08-19T09:33:20Z

c# - 性能如何受未使用的using指令的影响?

每当您创建新页面或项目时,Visual Studio都会自动为您创建使用语句。 其中一些你永远不会使用。

Visual Studio具有以下功能:#34;删除未使用的使用&#34;。

我想知道如果从未访问过的using语句仍然在文件的顶部提到,是否对程序性能有任何负面影响。

trans by 2019-08-19T07:35:46Z

c# - AddRange到集合

一位同事今天问我如何为一个系列添加一个范围。 他有一个继承自System.Linq的类。这种类型的get-only属性已包含一些项目。 他想将另一个集合中的项目添加到属性集合中。 他怎么能以C#3友好的方式这样做呢? (注意关于get-only属性的约束,这会阻止像执行Union和重新分配这样的解决方案。)

当然,与物业的foreach。 添加将工作。 但是System.Linq风格的AddRange会更加优雅。

编写扩展方法很容易:

public static class CollectionHelpers
{
    public static void AddRange<T>(this ICollection<T> destination,
                                   IEnumerable<T> source)
    {
        foreach (T item in source)
        {
            destination.Add(item);
        }
    }
}

但我感觉我正在重新发明轮子。 我在System.Linq或morelinq中找不到类似的东西。

糟糕的设计? 只需致电添加? 缺少明显的?

trans by 2019-08-19T07:30:18Z

c#4.0 - 你应该在C#4.0中使用重载或可选参数声明方法吗?

我在看Anders&#39; 谈谈C#4.0和C#5.0的预览,它让我想到C#中何时可以提供可选参数什么是推荐的方法来声明不需要指定所有参数的方法?

例如,类似于FileStream类的东西有大约十五种不同的构造函数,它们可以分为逻辑“家族”和“#39; 例如 字符串下面的那些,IntPtr中的那些和SafeFileHandle中的那些。

FileStream(string,FileMode);
FileStream(string,FileMode,FileAccess);
FileStream(string,FileMode,FileAccess,FileShare);
FileStream(string,FileMode,FileAccess,FileShare,int);
FileStream(string,FileMode,FileAccess,FileShare,int,bool);

在我看来,这种类型的模式可以通过改为使用三个构造函数来简化,并使用可以默认的参数的可选参数,这将使构造函数的不同系列更加清晰[注意:我知道这个更改不会是 在BCL制作,我假设这种情况说话]。

你怎么看? 从C#4.0开始,将具有可选参数的紧密相关的构造函数和方法组作为单一方法更有意义,还是有充分的理由坚持使用传统的多重载荷机制?

trans by 2019-08-19T07:17:33Z

c# - 使用委托或lambda包装StopWatch计时?

我正在编写这样的代码,做一些快速而肮脏的时间:

var sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000; i++)
{
    b = DoStuff(s);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

当然,有一种方法可以将这些定时代码称为花式schmancy .NET 3.0 lambda而不是(God禁止)切割和粘贴它几次并用Delegate替换Delegate

我知道它可以作为Delegate完成,但我想知道lambda方式。

trans by 2019-08-19T05:12:49Z

编译C#Lambda表达式性能

考虑以下对集合的简单操作:

static List<int> x = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var result = x.Where(i => i % 2 == 0).Where(i => i > 5);

现在让我们使用表达式。 以下代码大致相当:

static void UsingLambda() {
    Func<IEnumerable<int>, IEnumerable<int>> lambda = l => l.Where(i => i % 2 == 0).Where(i => i > 5);
    var t0 = DateTime.Now.Ticks;
    for (int j = 1; j < MAX; j++) 
        var sss = lambda(x).ToList();

    var tn = DateTime.Now.Ticks;
    Console.WriteLine("Using lambda: {0}", tn - t0);
}

但是我想在运行中构建表达式,所以这是一个新的测试:

static void UsingCompiledExpression() {
    var f1 = (Expression<Func<IEnumerable<int>, IEnumerable<int>>>)(l => l.Where(i => i % 2 == 0));
    var f2 = (Expression<Func<IEnumerable<int>, IEnumerable<int>>>)(l => l.Where(i => i > 5));
    var argX = Expression.Parameter(typeof(IEnumerable<int>), "x");
    var f3 = Expression.Invoke(f2, Expression.Invoke(f1, argX));
    var f = Expression.Lambda<Func<IEnumerable<int>, IEnumerable<int>>>(f3, argX);

    var c3 = f.Compile();

    var t0 = DateTime.Now.Ticks;
    for (int j = 1; j < MAX; j++) 
        var sss = c3(x).ToList();

    var tn = DateTime.Now.Ticks;
    Console.WriteLine("Using lambda compiled: {0}", tn - t0);
}

当然它并不完全像上面那样,所以公平地说,我稍微修改了第一个:

static void UsingLambdaCombined() {
    Func<IEnumerable<int>, IEnumerable<int>> f1 = l => l.Where(i => i % 2 == 0);
    Func<IEnumerable<int>, IEnumerable<int>> f2 = l => l.Where(i => i > 5);
    Func<IEnumerable<int>, IEnumerable<int>> lambdaCombined = l => f2(f1(l));
    var t0 = DateTime.Now.Ticks;
    for (int j = 1; j < MAX; j++) 
        var sss = lambdaCombined(x).ToList();

    var tn = DateTime.Now.Ticks;
    Console.WriteLine("Using lambda combined: {0}", tn - t0);
}

现在结果为MAX = 100000,VS2008,调试ON:

Using lambda compiled: 23437500
Using lambda:           1250000
Using lambda combined:  1406250

调试关闭:

Using lambda compiled: 21718750
Using lambda:            937500
Using lambda combined:  1093750

惊喜。 编译后的表达式比其他替代方案慢大约17倍。 现在问题来了:

  1. 我在比较非等效表达式吗?
  2. 是否有一种机制可以使.NET&#34;优化&#34; 编译后的表达式?
  3. 我如何以编程方式表达相同的连锁电话UsingLambdaCombined

更多统计数据。 Visual Studio 2010,调试ON,优化OFF:

Using lambda:           1093974
Using lambda compiled: 15315636
Using lambda combined:   781410

调试ON,优化ON:

Using lambda:            781305
Using lambda compiled: 15469839
Using lambda combined:   468783

调试OFF,优化ON:

Using lambda:            625020
Using lambda compiled: 14687970
Using lambda combined:   468765

新惊喜。 从VS2008(C#3)切换到VS2010(C#4),使得UsingLambdaCombined比原生lambda更快。


好的,我找到了一种方法来将lambda编译的性能提高一个数量级以上。 这是一个提示; 运行探查器后,92%的时间用于:

System.Reflection.Emit.DynamicMethod.CreateDelegate(class System.Type, object)

嗯...为什么在每次迭代中都会创建一个新的委托? 我不确定,但解决方案是在一个单独的帖子中。

trans by 2019-08-19T02:26:55Z

c# - 扩展方法和动态对象

我将把我的问题总结为以下代码片段。

List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };
Console.WriteLine(list.First());

上面的代码工作正常。

现在我尝试了以下内容

dynamic dList = list;
 Console.WriteLine(dList.First());

但是我得到了RuntimeBinderException。为什么会这样?

trans by 2019-08-19T02:15:33Z

如何从JSON对象字符串自动生成C#类文件

给定以下JSON对象,

form = {
  "name": "",
  "address": {
    "street": "",
    "city": "",
    "province": "",
    "postalCode": "",
    "country": ""
  },
  "phoneDay": "",
  "phoneCell": "",
  "businessName": "",
  "website": "",
  "email": ""
}

什么是自动生成以下C#类的工具?

public class ContactInfo
{
    public string Name { get; set; }
    public Address Address { get; set; }
    public string PhoneDay { get; set; }
    public string PhoneCell { get; set; }
    public string BusinessName { get; set; }
    public string Website { get; set; }
    public string Email { get; set; }
}

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string Province { get; set; }
    public string PostalCode { get; set; }
    public string Country { get; set; }
}

我们已经看过这些问题了:

从JSON Schema生成C#类询问JSON Schema,这可能是一种在未来使用的方法。

为Json对象生成的C#类的优点和缺点

trans by 2019-08-19T02:08:27Z

c# - System.Net.Http:命名空间中缺少? (使用.net 4.5)

TL; DR:我是这种语言的新手,不知道我在做什么

到目前为止,这是我的班级:

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Web;
using System.Net;
using System.IO;

public class MyClass
    {
        private const string URL = "https://sub.domain.com/objects.json?api_key=123";
        private const string data = @"{""object"":{""name"":""Title""}}";

        public static void CreateObject()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.ContentLength = data.Length;
            StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
            requestWriter.Write(data);
            requestWriter.Close();

            try
            {
                // get the response
                WebResponse webResponse = request.GetResponse();
                Stream webStream = webResponse.GetResponseStream();
                StreamReader responseReader = new StreamReader(webStream);
                string response = responseReader.ReadToEnd();
                responseReader.Close();
            }
            catch (WebException we)
            {
                string webExceptionMessage = we.Message;
            }
            catch (Exception ex)
            {
                // no need to do anything special here....
            }
        }

        static void Main(string[] args)
        {
            MyClass.CreateObject();
        }
}

当我做csc filename.cs时,我收到以下错误:

类型或命名空间名称&#39; Http&#39; 名称空间中不存在System.Net&#39; (你错过了一个程序集引用吗?)

trans by 2019-08-19T01:59:07Z

c# - 在Windows Phone 7 emu上触发两次TextBox.TextChanged事件

我有一个非常简单的测试应用程序,只是为了玩Windows Phone 7.我刚刚在标准UI模板中添加了TextBlockcounter。 唯一的自定义代码如下:

public partial class MainPage : PhoneApplicationPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private int counter = 0;

    private void TextBoxChanged(object sender, TextChangedEventArgs e)
    {
        textBlock1.Text += "Text changed " + (counter++) + "\r\n";
    }
}

TextBlock事件在XAML中连接到counter

<TextBox Height="72" HorizontalAlignment="Left" Margin="6,37,0,0"
         Name="textBox1" Text="" VerticalAlignment="Top"
         Width="460" TextChanged="TextBoxChanged" />

但是,每当我在模拟器中运行时按一个键(屏幕键盘或物理键盘,按下Pause以启用后者),它会使计数器递增两次,在TextBlock中显示两行。所有内容我都是 我试过表明这个事件真的发射了两次,我不知道为什么。 我已经确认它只被订阅了一次 - 如果我在counter构造函数中取消订阅,则在文本更改时根本不会发生任何事情(对文本块)。

我已经在常规的Silverlight应用程序中尝试了相同的代码,但它并没有在那里发生。 我现在没有手机可以重现这一点。 我还没有发现任何关于Windows Phone 7中已知问题的记录。

任何人都可以解释我做错了什么,或者我应该将其报告为错误?

编辑:为了减少有两个文本控件的可能性,我已经尝试完全删除TextBlock,并将TextBoxChanged方法更改为仅增加counter.我然后在模拟器中运行,键入10 字母,然后在counter++;线上放置一个断点(只是为了摆脱闯入调试器导致问题的任何可能性) - 它显示counter为20。

编辑:我现在在Windows Phone 7论坛中问过......我们会看到会发生什么。

trans by 2019-08-19T00:55:04Z

c# - Windows GUI:WPF或WinRT(2015+)

我想了解不同的技术,在Windows World中构建GUI时使用。

对于上下文,我正在构建一个小的2D平台多人游戏。(仅用于学习目的..)

我的老师说他认为WPF是正确的方法,但似乎他只将它与Windows Forms进行比较。

我的理解是,在2015年,Windows Forms完全死了?

在其他堆栈问题中,他们说WinRT + XAML用于Metro GUI构建(Window 8 tiles thing!),似乎WPF仅用于Window 7/8中的桌面,并且与Silverlight密切相关。

Windows 8 Runtime(WinRT / Windows应用商店应用程序/ Windows 10通用应用程序)与Silverlight和WPF相比如何?

  • 桌面是旧应用程序所在的位置(红色.WFP)。
  • 新的应用程序类Metro应用程序可以通过多种方式构建,   包括VB.NET,C#或C ++。 这三种语言选项都可以使用   用于构建UI的XAML。 另一种方法是使用   用于开发UI和UI的JavaScript / HTML5 / CSS   应用代码。

我真正的问题是:是不是有一种在Window World中构建GUI的好方法?

如果没有,应该在Window 7,Window 8(桌面和地铁),Window Phone,(和Windows 10!)甚至x-box上使用哪些技术。

这种方式比较不同的技术吗?

您认为投入时间的正确方法是什么?

trans by 2019-08-18T23:55:15Z

在C#中是否有任何方法可以使用扩展方法覆盖类方法?

在某些情况下,我想要使用扩展方法覆盖类中的方法。 有没有办法在C#中做到这一点?

例如:

public static class StringExtension
{
    public static int GetHashCode(this string inStr)
    {
        return MyHash(inStr);
    }
}

我想要这样做的一种情况是能够将字符串的散列存储到数据库中,并且所有使用字符串类的散列(即字典)的类都使用相同的值 等等)由于内置的.Net哈希算法不能保证从一个版本的框架到下一个版本兼容,我想用自己的版本替换它。

还有其他情况我已经遇到了我想用扩展方法覆盖类方法的地方,所以它不仅仅特定于字符串类或GetHashCode方法。

我知道我可以通过子类化现有的类来做到这一点但是在很多情况下能够使用扩展来做它会很方便。

trans by 2019-08-18T23:32:53Z

c# - 未为此项目设置OutputPath属性

当我尝试在Visual Studio 2008中从x86调试模式编译我的项目时。我收到此错误。 当我查看抱怨的项目的属性组时,我看到输出路径已设置。

这是.csproj文件的属性组部分

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
  <DebugSymbols>true</DebugSymbols>
  <OutputPath>bin\x86\Debug\</OutputPath>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <BaseAddress>285212672</BaseAddress>
  <FileAlignment>4096</FileAlignment>
  <DebugType>full</DebugType>
  <PlatformTarget>x86</PlatformTarget>
 <ErrorReport>prompt</ErrorReport>

任何人都可以阐明这一点吗?

注意:当我编译这个Debug和任何CPU时,它工作。

更新:错误1未为此项目设置OutputPath属性。 请检查以确保您已指定有效的配置/平台组合。配置=&#39;调试&#39;平台=&#39;86&#39;

trans by 2019-08-18T21:47:46Z

c# - 我可以使用ASP.NET设置HTML /电子邮件模板吗?

我正在一个会发送大量电子邮件的网站上工作。 我想设置页眉和页脚文本,甚至是模板,以便用户在需要时轻松编辑这些电子邮件。

如果我将HTML嵌入到C#字符串文字中,它很丑陋,他们不得不担心转义。 包括页眉和页脚的平面文件可能会起作用,但关于它的一些东西感觉不对。

什么是理想的是以某种方式使用.ASPX页面作为模板,然后告诉我的代码服务该页面,并使用为电子邮件返回的HTML。

有这么好的方法吗? 有没有更好的方法来解决这个问题?

更新:
我添加了一个答案,使您可以使用标准的.aspx页面作为电子邮件模板。 只需像通常那样替换所有变量,使用数据绑定等。然后只需捕获页面的输出,瞧! 你有HTML电子邮件!

更新了CAVEAT !!!:
我在一些aspx页面上使用MailDefinition类就好了,但是当在运行的服务器进程中尝试使用这个类时,它失败了。 我相信这是因为MailDefinition.CreateMailMessage()方法需要一个有效的控件来引用,即使它并不总是做某事。 因此,我建议使用aspx页面或使用ascx页面的Mun方法,这看起来好一点。

trans by 2019-08-18T17:58:09Z

c# - DbSet.Attach(entity)vs DbContext.Entry(entity).State = EntityState.Modified

当我处于一个独立的场景并从客户端获取dto时,我将其映射到一个实体以保存它,我这样做:

context.Entry(entity).State = EntityState.Modified;
context.SaveChanges();

那么DbSet.Attach(entity)是什么

或者当EntityState.Modified已经附加实体时,我为什么要使用.Attach方法?

trans by 2019-08-18T16:53:10Z

c# - Web API 2:如何在对象及其子对象上返回带有camelCased属性名称的JSON

UPDATE

感谢所有的答案。 我正在开展一个新项目,看起来我终于明白了这一点:看起来下面的代码实际上应该归咎于:

public static HttpResponseMessage GetHttpSuccessResponse(object response, HttpStatusCode code = HttpStatusCode.OK)
{
    return new HttpResponseMessage()
    {
        StatusCode = code,
        Content = response != null ? new JsonContent(response) : null
    };
}

别处...

public JsonContent(object obj)
{
    var encoded = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore } );
    _value = JObject.Parse(encoded);

    Headers.ContentType = new MediaTypeHeaderValue("application/json");
}

假设它是WebAPI,我忽略了看似无害的JsonContent但没有。

这在任何地方都可以使用......我能说第一个,wtf吗? 或许这应该是&#34;他们为什么这样做?&#34;


原始问题如下

人们会认为这将是一个简单的配置设置,但它现在已经躲过我太久了。

我看过各种解决方案和答案:

[https://gist.github.com/rdingwall/2012642]

似乎不适用于最新的WebAPI版本......

以下似乎不起作用 - 属性名称仍然是PascalCased。

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;

json.UseDataContractJsonSerializer = true;
json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;

json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

Mayank的答案在这里:CamelCase JSON WebAPI子对象(嵌套对象,子对象)似乎是一个令人不满意但可行的答案,直到我意识到这些属性必须添加到生成的代码中,因为我们正在使用linq2sql ...

有什么方法可以自动完成吗? 这个讨厌的&#39; 我已经困扰了很长一段时间了。

trans by 2019-08-18T13:56:49Z

visual studio - 如何将一个C#项目中的一个类与另一个C#项目一起使用

在同一个解决方案中,我有两个项目:P1和P2。 如何在P2中使用P1类?

trans by 2019-08-18T11:43:15Z

c# - WCF在没有“set”的属性上扼流圈。 任何解决方法?

我有一些我通过服务方法传递的类,并且该类具有get-only属性:

[DataContract]
public class ErrorBase
{
  [DataMember]
  public virtual string Message { get { return ""; } }
}

我在服务方面遇到异常:

System.Runtime.Serialization.InvalidDataContractException:无设置   财产的方法&#39;消息&#39; 在类型&#39; MyNamespace.ErrorBase&#39;。

我必须将此属性作为唯一的getter,我不能允许用户为其分配值。 我可以使用的任何解决方法? 或者我错过了一些额外的属性?

trans by 2019-08-18T11:04:55Z

c# - 如何使用LINQ从DataTable中获取不同的,有序的名称列表?

我有一个orderbyName专栏。 我想生成按字母顺序排列的唯一名称的集合。 以下查询忽略order by子句。

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr["Name"]
    select (string)dr["Name"]).Distinct();

为什么orderby没有得到强制执行?

trans by 2019-08-18T11:00:22Z

C#vs C - 性能差异很大

我发现C anc C#中类似代码之间存在巨大的性能差异。

C代码是:

#include <stdio.h>
#include <time.h>
#include <math.h>

main()
{
    int i;
    double root;

    clock_t start = clock();
    for (i = 0 ; i <= 100000000; i++){
        root = sqrt(i);
    }
    printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);   

}

而C#(控制台应用程序)是:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime startTime = DateTime.Now;
            double root;
            for (int i = 0; i <= 100000000; i++)
            {
                root = Math.Sqrt(i);
            }
            TimeSpan runTime = DateTime.Now - startTime;
            Console.WriteLine("Time elapsed: " + Convert.ToString(runTime.TotalMilliseconds/1000));
        }
    }
}

使用上面的代码,C#在0.328125秒(发布版本)完成,C运行11.14秒。

使用mingw将c编译为可执行的Windows。

我总是假设C / C ++更快或至少与C#.net相当。 究竟是什么导致C运行速度慢了30多倍?

编辑:看来C#优化器正在删除root,因为它没有被使用。我将根分配更改为root + =并在结尾处打印出总计。我还使用cl.exe编译了C,其中/ O2标志设置为最大速度。

结果现在是:C为3.75秒C#2.61秒

C仍然需要更长的时间,但这是可以接受的

trans by 2019-08-18T10:50:02Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共176页