小编cor*_*ttk的帖子

为什么在C#中捕获并重新抛出异常?

我正在查看文章C# - 可序列化DTO上的数据传输对象.

这篇文章包括这段代码:

public static string SerializeDTO(DTO dto) {
    try {
        XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
        StringWriter sWriter = new StringWriter();
        xmlSer.Serialize(sWriter, dto);
        return sWriter.ToString();
    }
    catch(Exception ex) {
        throw ex;
    }
}
Run Code Online (Sandbox Code Playgroud)

本文的其余部分看起来很合理(对于菜鸟),但是try-catch-throw会抛出一个WtfException ... 这不完全等同于根本不处理异常吗?

人机工程学:

public static string SerializeDTO(DTO dto) {
    XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
    StringWriter sWriter = new StringWriter();
    xmlSer.Serialize(sWriter, dto);
    return sWriter.ToString();
}
Run Code Online (Sandbox Code Playgroud)

或者我错过了C#中错误处理的基本内容?它与Java几乎相同(减去已检查的异常),不是吗?......也就是说,他们都改进了C++.

Stack Overflow问题重新抛出无参数捕获和不执行任何操作之间的区别?似乎支持我的观点,即try-catch-throw是一个无操作.


编辑:

只是为了总结未来发现这个主题的人...

不要

try {
    // Do stuff that might throw an …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling try-catch

528
推荐指数
9
解决办法
21万
查看次数

在C#代码中解析(大)XML的最佳方法是什么?

我正在用C#编写一个GIS客户端工具,以从服务器中检索基于GML的XML模式(下面的示例)中的"功能".提取物限制为100,000个功能.

我猜测最大的extract.xml可能会增加大约150兆字节,所以很明显DOM解析器已经出来我一直试图在XmlSerializerXSD.EXE生成的绑定之间做出决定--OR-- XmlReader和手工制作的对象图.

或者也许有一种更好的方式我尚未考虑过?像XLINQ,或????

请任何人指导我吗?特别是关于任何给定方法的存储效率.如果不是,我将不得不"原型化"两种解决方案,并将它们并排分析.

我是.NET中的一个原始对象.任何指导将不胜感激.

感谢您.基思.


示例XML - 最多100,000个,每个功能最多234,600个coords.

<feature featId="27168306" fType="vegetation" fTypeId="1129" fClass="vegetation" gType="Polygon" ID="0" cLockNr="51598" metadataId="51599" mdFileId="NRM/TIS/VEGETATION/9543_22_v3" dataScale="25000">
  <MultiGeometry>
    <geometryMember>
      <Polygon>
        <outerBoundaryIs>
          <LinearRing>
            <coordinates>153.505004,-27.42196 153.505044,-27.422015 153.503992 .... 172 coordinates omitted to save space ... 153.505004,-27.42196</coordinates>
          </LinearRing>
        </outerBoundaryIs>
      </Polygon>
    </geometryMember>
  </MultiGeometry>
</feature>
Run Code Online (Sandbox Code Playgroud)

c# xml xmlreader xml-serialization

59
推荐指数
4
解决办法
6万
查看次数

list.First(),list.ElementAt(0)和list [0]之间的区别?

按照标题...... list.First(),list.ElementAt(0)和list [0]之间有什么真正的区别吗?

c# list

25
推荐指数
4
解决办法
2万
查看次数

如何在C#中显示前面的表格

伙计们,

请问有没有人知道如何从一个看不见的应用程序中显示一个表单,让它获得焦点(即出现在其他窗口的顶部)?我在C#.NET 3.5中工作.

我怀疑我采取了"完全错误的方法"......我没有 Application.Run(新的TheForm())而不是我(新的TheForm()).ShowModal() ... Form基本上是一个模态对话,带几个复选框; 文本框,以及确定和取消按钮.用户勾选一个复选框并输入描述(或其他),然后按OK,表单消失,进程从表单中读取用户输入,处理它,然后继续处理.

这是有效的,除非表单显示它没有得到焦点,而是它出现在"主机"应用程序后面,直到你在任务栏中点击它(或其他).这是一个最烦人的行为,我预测会导致许多"支持调用",而现有的VB6版本没有这个问题,所以我在可用性方面倒退了...用户不会接受(并且也不应该).

所以...我开始认为我需要重新考虑整个shebang ...我应该预先显示表单,作为"正常应用程序"并将处理的剩余部分附加到OK按钮单击事件.它应该工作,但这需要时间,我没有(我已经超过时间/预算)...所以首先我真的需要尝试使当前的方法工作...即使快速和 - 脏的方法.

所以,请有人知道如何"强制".NET 3.5表格(通过公平的方式或家禽)来获得焦点?我在想"魔术"的Windows API调用(我知道

Twilight Zone:这似乎只是工作中的一个问题,我们正在Windows XP SP3上使用Visual Studio 2008 ...我刚刚无法在家中使用SSCCE(见下文)重现问题关于Vista Ulimate的C#2008 ......这很好用.咦?WTF?

另外,我发誓昨天在工作时显示了我运行EXE时的表格,但不是直接从IDE(我刚刚忍受的)F5'(或Ctrl-F5'ed)时... ...在家里表单显示正常.Totaly confusterpating!

它可能相关,也可能不相关,但Visual Studio今天早上在调试模式下运行并"动态"编辑代码时崩溃并烧毁...它被卡住了我认为是无限循环的错误消息.错误消息是关于"无法调试此项目,因为它不是当前项目,或者其他东西......所以我只是使用进程资源管理器将其杀死.它再次启动,甚至提供恢复"丢失"文件,我接受的报价.

using System;
using System.Windows.Forms;

namespace ShowFormOnTop {
    static class Program {
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
            Form1 frm = new Form1();
            frm.ShowDialog();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

背景:我正在将现有的VB6实现移植到.NET ...它是一个名为MapInfo的"客户端"GIS应用程序的"插件" .现有客户"无形地工作",我的指示是"尽可能保持新版本与旧版本尽可能接近",这很好(经过多年的修补); 它只是用不支持的语言编写的,所以我们需要移植它.

关于我:我通常都是C#和.NET的菜鸟,虽然我有一个底部擦拭证书,我已经是一名专业程序员已经10年了; 所以我有点"知道一些东西".

任何见解都是最受欢迎的......谢谢大家花时间阅读这篇文章.遗嘱(显然)不是我的强项.

干杯.基思.

c# forms z-order

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

如何将(大)XML写入C#中的文件?

伙计们,

请问,在C#.NET 3.5中编写真正大的XML文档(最多500 MB)有什么好方法?我有一些搜索,似乎找不到任何解决这个具体问题的东西.

我之前的主题(在C#代码中解析(大)XML的最佳方法是什么?)包括读取类似大小的Xml文档...解决了这个问题后,我需要考虑如何编写更新的功能(http:// www. opengeospatial.org/standards/sfa)到"update.xml"文件.

我的想法:考虑到要生成的文档的最大大小,显然有一个大的DOM已经出局了.我正在使用XSD.EXE从模式中生成绑定类...它与XmlSerializer类很好地配合,但我认为它在"引擎盖下"构建了一个DOM.它是否正确?.我不能同时在内存中保存所有功能(最多50,000个).我需要从数据库中读取一个功能,序列化它,并将其写入文件.所以我想我应该使用XmlSerializer为文件的每个单独的功能编写"doclet".如果这是可能/可行的话,我还不知道.

你怎么看?

背景:我正在将旧的VB6 MapInfo"客户端插件"移植到C#.有一个现有的J2EE"更新服务"(实际上只是一个web-app),该程序(以及其他)必须使用它.我无法改变服务器; 除非有必要; 特别是涉及改变其他客户.服务器接受一个XML文档,其架构不具体说明任何名称空间......即:只有默认名称空间,一切都在其中.

我的经验:我几乎是一个C#和.NET新手.我用各种语言编写了大约10年的编程,包括Java,VB,C和一些C++.

干杯全都.基思.

PS:这是晚餐时间,所以我将大约半小时擅离职守.

c# xml

13
推荐指数
2
解决办法
7734
查看次数

计算距离A的给定距离处的AB线上的点

我很疯狂地计算沿着给定线AB的点,在离A的给定距离处,这样我就可以"绘制"两个给定点之间的线.一开始听起来很简单,但我似乎无法做到这一点.更糟糕的是,我不明白我哪里出错了.几何(和一般的数学)不是我强大的套件.

我已经阅读了类似的问题,并在那里有答案.事实上,我直接从Mads Elvheim的回答中解除了我对CalculatePoint函数的当前实现:给定一个起点和终点,以及一个距离,计算沿线的一个点(加上后面的注释中的修正 - 如果我理解正确的话)因为我的独立尝试解决问题让我无处可去,除了一流的快递票务frusterpationland.

这是我的更新代码(请参阅EDIT备注帖子的底部):

using System;
using System.Drawing;
using System.Windows.Forms;

namespace DrawLines
{
    public class MainForm : Form
    {
        // =====================================================================
        // Here's the part I'm having trouble with. I don't really understand
        // how this is suposed to work, so I can't seem to get it right!
        // ---------------------------------------------------------------------

        // A "local indirector" - Just so I don't have go down and edit the 
        // actual call everytime this bluddy thing …
Run Code Online (Sandbox Code Playgroud)

c# math graphics geometry

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

为什么在JFrame上绘制的速度比在JPanel上慢得多?

我的问题是,与直接在JFrame上绘制相比,绘制JPanel时,相同的swing-custom-painting例程快16倍?它只是双缓冲吗?它肯定不是吗?

背景:当JFrame未被遮挡时(特别是仅被部分遮挡),我遇到了自定义绘画未被刷新的问题.搜索完SO后,我决定咬一口,弄清楚如何将JPanel的子类连接成一个bluddy-NetBeans-form-designer形式.

对于处于相同情况的任何人:在NetBeans中,您需要创建一个新的标准类(不是JPanel表单),恰好可以扩展JPanel,并手动编写其中的所有内容(没有GUI设计器,就像好日子一样,叹).然后在表单中添加标准JPanel,设置它的大小; 然后右键单击并选择"自定义代码"并在组合框中选择"自定义创建"...在其中创建新的javax.swing.JPanel替换其子类.

所以...这使我能够"正确地"并在组件上绘画,而不是直接在表格上绘画.此外,面板 - 键 - 听众是一个更加整洁的解决方案,而不是高举框架键事件调度员.

无论如何,现在分析器说完全相同的自定义绘图代码在JPanel的paintComponent()中执行的速度比JFrame的paint()快了近16倍......我想知道是否有人可以解释原因.

先感谢您.基思.


编辑:这个问题是基于MISINTERPRETED METRICS.探查器不包含/报告AWT-EventQueue线程中的JPanel的paintComponent()方法,其中 - 我的基线配置文件确实包含JFrame的paint().在问一个愚蠢的问题之前我应该​​仔细看一下.我的错.

java swing custom-painting

8
推荐指数
1
解决办法
1034
查看次数

如何从动态生成的程序集中引用GAC程序集?

我正在用C#教自己中间语言(IL)生成,而且我已经被困了几个小时 - 看起来像是如何System.Windows.Forms.dll从动态程序集中引用(例如) ,我正在使用AppDomain.CurrentDomain.DefineDynamicAssemblySystem.Reflection.Emit...基于http://olondono.blogspot.com/2008/02/creating-code-at-runtime.html上最优秀的例子.

我有一个基本的TransferObjectDllGenerator工作,但现在我想从(仅)生成的程序集中引用现有的库,并且无法弄清楚如何.

这个问题引导我参加这个AppDomain.CurrentDomain.AssemblyResolve活动.我尝试实现一个事件处理程序,但它永远不会触发,所以我想我已经做了一些基本上愚蠢的事情,比如把事件处理程序放在完全错误的地方?

任何指向正确方向的人都会非常感激.

这是我的主线...有趣的是 // <<-- Commented thus

using System;
using System.Reflection;
//using System.Windows.Forms; (and removed the project's Reference to System.Windows.Forms)

namespace ILGen
{
/// <summary>
/// Generates .\bin\$whatever\PersonLibrary.dll containing MSIL equivalent to:
///   namespace PersonLibrary {
///     public class Person {
///       public string FirstName { get; set; }
///       public string LastName { get; set; }
///       public Person() { }
///       public …
Run Code Online (Sandbox Code Playgroud)

c# assemblies reference dynamically-generated

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

在Java中使用结果集的有效方法

我正在运行一个select命令,它返回100万行迭代ResultSet.以下代码需要5分钟才能执行.

是否有更快的迭代结果集的方法?

conn = getDbConnection();
Statement createStatement = conn.createStatement();
ResultSet rs = createStatement.executeQuery("Select * from myTable");
while (rs.next())
{
    //do nothing
}
Run Code Online (Sandbox Code Playgroud)

java中是否有一种方法可以在查看结果集中的所有记录时提高效率.

谢谢

java

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

SQL Server:UPDATE语句,其中MAX查询

我在SQL Server 2008 R2中进行数据迁移.我是一个SQL-Server noob,但我非常了解Ingres和MySql.

我需要将两个新字段的"默认值"设置为另一个表中的"当前值".这是我的第一次天真尝试(我如何在Ingres中做到这一点).

update  rk_risk
set     n_target_probability_ID = a.n_probability_ID
      , n_target_consequence_ID = a.n_consequence_ID
from    rk_assess a
WHERE   a.n_assess_id = (
    SELECT  MAX(n_assess_id)
    FROM    rk_assess a2
    WHERE   a2.n_risk_id = a.n_risk_id
);
Run Code Online (Sandbox Code Playgroud)

上述查询在续集中执行时没有错误,但它将所有 n_target_probability_ID的&n_target_consequence_ID设置为相同的值 ... OUTRIGHT最后一次评估的值(与"此风险的最后评估"相对应).

rk_assess表包含rk_risks 的评估记录的完整历史记录,我的任务是将风险表的新目标概率和后果列"默认"为"当前"(即最后一个)评估记录中的值.该rk_assess.n_assess_id列是一个自动递增的标识符(一旦设置为不可变),因此max-id应该始终是最后输入的记录.

我在google和SO上都进行了一些搜索,并尝试了一些不同版本的查询,但我仍然卡住了.这里有几个史诗般的失败,有参考.

update  rk_risk
set     n_target_probability_ID = (select a.n_probability_ID from rk_assess a where a.n_assess_id = (select max(n_assess_id) from rk_assess a2 where a2.n_risk_id = a.n_risk_id) as ca)
      , n_target_consequence_ID = (select a.n_consequence_ID from rk_assess a …
Run Code Online (Sandbox Code Playgroud)

sql sql-server subquery max sql-update

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