请考虑以下代码:
代码
public class RecursiveConstructor
{
//When this constructor is called
public RecursiveConstructor():this(One(), Two())
{
Console.WriteLine("Constructor one. Basic.");
}
public RecursiveConstructor(int i, int j)
{
Console.WriteLine("Constructor two.");
Console.WriteLine("Total = " + (i+j));
}
public static int One()
{
return 1;
}
public static int Two()
{
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
调用方法
public class RecursiveConstructorTest
{
public static void Main()
{
RecursiveConstructor recursiveConstructor = new RecursiveConstructor();
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
结果
构造函数二.
总数= 3
构造函数之一.基本.
为什么第二个构造函数首先运行?
我理解在链式构造函数中,我们首先调用基类构造函数,然后重新启动链,但是当构造函数保存在同一个类中时,为什么我们仍然会看到这个行为首先调用额外的构造函数?
我原以为最基本的构造函数内容会先执行.
密封课程不是我过去常常注意到的事情,但我发现自己想知道什么是最佳实践.如果你知道一个课程不会或不应该从中得出你是否会密封它作为一个预防措施,只需留下密封的关键字,知道有人试图从中获取的机会很小.
我想我要问的是,你是否应该密封所有不用于继承的课程,只是作为一种良好的做法?
在弄乱嵌套类并将类型名称输出到控制台窗口时,我注意到了一些好奇.我想知道是否有人可以为我解释一下.当调用GetType()
主类时,它返回我期望的内容,即相关名称空间后的类的名称.即Namespace.Namespace.Classname
但是,当我从封闭类中调用一个函数来返回嵌套类的类型时,我得到返回的值,如下所示:
Namespace.Namespace.ClassNameEnclosing + ClassNameNested.
Run Code Online (Sandbox Code Playgroud)
为什么它不是简单地以点符号返回.为什么+符号?我只是好奇在后台发生了什么导致这种表示法.
我在Eclipse中用TestNG运行我的selenium rc测试.我有一个试图打开新浏览器页面的链接.如何选择此新页面进行操作?我用这个代码:
selenium.selectWindow("name=NewPage");
但它说找不到页面.我还尝试使用以下代码定义页面ID或标题:
String[] wins = selenium.getAllWindowIds();
for (String s : wins)
System.out.println("win: " + s);
Run Code Online (Sandbox Code Playgroud)
它没有定义我新打开的窗口:
win: MainPage
win:
Run Code Online (Sandbox Code Playgroud)
如果使用selenium.getAllWindowNames()
我得到win: selenium_main_app_window
win: selenium_blank65815
.
我写这段代码selenium.selectWindow("name=blank99157");
但得到错误 -ERROR: Window does not exist. If this looks like a Selenium bug, make sure to read http://seleniumhq.org/docs/02_selenium_ide.html#alerts-popups-and-multiple-windows for potential workarounds.
我对泛型非常新,我正在尝试编写一个简单的类,它将是通用的,但也允许对字符串成员变量进行一些描述的排序.
目前我有一个基本类,但是当我尝试实现接口成员CompareTo()时,我在顶部收到一个错误,告诉我它没有实现.这是什么问题?
using System;
namespace GenericsPracticeConsole.Types
{
class SortableGenericType<T> : IComparable
{
private T t;
private string stringName;
public T name
{
get { return t; }
set { t = value; }
}
public int CompareTo(SortableGenericType<T> ourObject)
{
return stringName.CompareTo(ourObject.stringName);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个数据库表,目前在SRID 27700(英国国家电网)中保存几何数据.在检索数据时,我需要将其转换为SRID 4326(WGS84).有没有办法将PostGIS中找到的ST_Transform等函数应用到我的数据中以获得我需要的结果?
注意:解决方案需要能够使用T-SQL而不是存储过程等来实现.我必须能够构造一个语句并将其保存在表中作为字符串字段以便稍后检索.这是因为我的解决方案与数据库无关.
我目前在Oracle中这样做的方式如下:
select CLUSTER_ID,
NUM_POINTS,
FEATURE_PK,
A.CELL_CENTROID.SDO_POINT.X,
A.CELL_CENTROID.SDO_POINT.Y,
A.CLUSTER_CENTROID.SDO_POINT.X,
A.CLUSTER_CENTROID.SDO_POINT.Y,
TO_CHAR (A.CLUSTER_EXTENT.GET_WKT ()),
TO_CHAR (A.CELL_GEOM.GET_WKT ()),
A.CLUSTER_EXTENT.SDO_SRID
from (SELECT CLUSTER_ID,
NUM_POINTS,
FEATURE_PK,
SDO_CS.transform (CLUSTER_CENTROID, 4326) cluster_centroid,
CLUSTER_EXTENT,
SDO_CS.transform (CELL_CENTROID, 4326) cell_centroid,
CELL_GEOM FROM :0) a
where sdo_filter( A.CELL_GEOM,
SDO_CS.transform(mdsys.sdo_geometry(2003, :1, NULL, mdsys.sdo_elem_info_array(1,1003,3),mdsys.sdo_ordinate_array(:2, :3, :4, :5)),81989)) = 'TRUE'
Run Code Online (Sandbox Code Playgroud)
在使用PostGIS的PostgreSQL中,我这样做:
select CLUSTER_ID,
NUM_POINTS,
FEATURE_PK, ST_X(a.CELL_CENTROID),
ST_Y(a.CELL_CENTROID),
ST_X(ST_TRANSFORM(a.CLUSTER_CENTROID, 4326)),
ST_Y(ST_TRANSFORM(a.CLUSTER_CENTROID, 4326)),
ST_AsText(a.CLUSTER_EXTENT),
ST_AsText(a.CELL_GEOM),
ST_SRID(a.CLUSTER_EXTENT)
FROM (SELECT CLUSTER_ID,
NUM_POINTS,
FEATURE_PK,
ST_TRANSFORM(ST_SetSRID(CLUSTER_CENTROID, 27700), 4326) cluster_centroid,
CLUSTER_EXTENT,
ST_TRANSFORM(ST_SetSRID(CELL_CENTROID, 27700), 4326) cell_centroid,
CELL_GEOM
from …
Run Code Online (Sandbox Code Playgroud) 如果我传递这样的文字:
first line
second line
Run Code Online (Sandbox Code Playgroud)
到.bat文件,它只将第一行作为参数值.
我怎样才能解决这个问题?谢谢
我正在尽我所能将空间数据库从Oracle迁移到Postgresql并且失败了.
我已经尝试了许多不同的途径,你可以从我之前的问题中看到,这里没有任何工作.有人可以告诉我一个相对无痛的方式这样做,因为我现在无能为力.
我尝试过使用第三方软件,例如SwisSQL,但这种方法失败了很多错误.我已经尝试创建充满插入语句的文件,然后创建一个C#程序来解析这些并用相关的postgis替换oracle空间类型,并且由于这些文件的绝对大小而在最基本的替换上失败并出现内存不足异常.有些表中有超过200万条记录,因此您可以想象包含每个表的插入文件的大小.
我非常渴望解决这个问题,因为它严重阻碍了这个项目的进展.我需要Postgresql中的数据,因为我正在编写需要与数据库无关的软件,这意味着它必须在每个数据库上的实际数据上进行测试.
任何想法都会张开双臂欢迎.如果它不是这个的空间方面,它将更加简单,现在最有可能完成.
编辑:
下面是Toad for Oracle生成的插入示例,用于概述数据复杂性.
Insert into CLUSTER_1000M
(CLUSTER_ID, CELL_GEOM, CELL_CENTROID)
Values
(4410925,
"MDSYS"."SDO_GEOMETRY"(2003,81989,NULL,
"MDSYS"."SDO_ELEM_INFO_ARRAY"(1,1003,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
"MDSYS"."SDO_ORDINATE_ARRAY"(80000,103280,81000,104280,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)),
"MDSYS"."SDO_GEOMETRY"(2001,81989,
"MDSYS"."SDO_POINT_TYPE"(80500,103780,NULL),NULL,NULL));
Run Code Online (Sandbox Code Playgroud) 我一直收到这个错误:
/* ... */
$em = $this->getDoctrine()->getEntityManager();
$movie = $em->getRepository('MyMyBundle:Movie')->findMovieByName('moviename'); // Repository Class
\Doctrine\Common\Util\Debug::dump($movie); // dumps the object just fine! The Repository found it
echo $movie->getId(); // brings me the error nevertheless
Run Code Online (Sandbox Code Playgroud)
致命错误:在......在线的非对象上调用成员函数getId()...
我的实体中有getId()方法.其他方法即使它是对象也不起作用!
对象被转储如下:
..... array(1) { [0]=> object(stdClass)#759 (59) { ["__CLASS__"]=> string( .....
Run Code Online (Sandbox Code Playgroud)
任何提示?
我在这里看到了一个关于这个的问题,但它已经老了,所以如果现在有解决方案,我会再问一次.
我的问题是这个.我有一个数据库表,我想从中选择,但我想锁定我选择的行.这样做的原因是我可能正在运行另一个进程,它也想要选择相同的行,我想阻止它.
想象一下,我有两个进程做同样的事情.一个人执行选择并开始执行其数据处理.然后几秒钟后,下一个进程出现并进行选择,但由于行未锁定,因此它也会采用相同的记录并开始处理它们.这当然是一个糟糕的情况.在Oracle中,您可以使用SELECT FOR UPDATE,它将取消对行的锁定以防止它们被第二个进程使用.如何在SQL Server 2008中实现这一目标?
我应该补充一点,我只能使用标准的sql语句.我无法访问程序,功能等.必须通过简单的声明来完成.它是一个漫长的故事和设计考虑因素已经从我手中夺走.解决方案必须能够存储在表中,稍后检索,然后通过C#中的ADO对象运行,特别是分配给命令对象.
如何将锁应用于此语句?
SELECT *
FROM
(SELECT TOP (20) *
FROM [TMA_NOT_TO_ENTITY_QUEUE]
WHERE [TMA_NOT_TO_ENTITY_QUEUE].[STATE_ID] = 2
ORDER BY TMA_NOT_TO_ENTITY_QUEUE.ID) a
Run Code Online (Sandbox Code Playgroud) c# ×4
spatial ×2
.net ×1
batch-file ×1
constructor ×1
doctrine ×1
generics ×1
icomparable ×1
java ×1
locking ×1
nested-class ×1
newline ×1
oracle ×1
parameters ×1
popupwindow ×1
postgis ×1
postgresql ×1
selenium ×1
selenium-rc ×1
symfony ×1
types ×1