編寫C#裏面的屬性代碼是機械又重複的勞動, 長的變量名還不免敲錯, 因而寫了一個, 輸入類型和名稱自動生成屬性, 並保存到剪貼板裏, 在VS裏面粘貼過來就好了.ui
# # generate cs property # # string name # # ==> # # /// <summary> # /// # /// </summary> # public string Name # { # get { return _name; } # set { _name = value; } # } private string _name; # use Win32::Clipboard; # # # sub usage() { print("Invalid input\n"); print("Input format: <type> <name>\n"); print(" Example: string Name\n"); } # # # sub MakeProperty($$) { ($type,$name) = @_; $member_name = get_member_name( $name ); $property_name = get_property_name( $name ); $s = "#region $property_name\n"; $s .= "/// <summary>\n"; $s .= "/// \n"; $s .= "/// </summary>\n"; $s .= "public $type $property_name\n"; $s .= "{\n"; $s .= "\tget\n"; $s .= "\t{\n"; if( uc($type) eq "STRING" ) { $s .= "\t\tif ($member_name == null)\n"; $s .= "\t\t{\n"; $s .= "\t\t\t$member_name = string.Empty;\n"; $s .= "\t\t}\n"; } else { if( is_value_type($type) == 0 ) { $s .= "\t\tif ($member_name == null)\n"; $s .= "\t\t{\n"; $s .= "\t\t\t$member_name = new $type();\n"; $s .= "\t\t}\n"; } } $s .= "\t\treturn $member_name;\n"; $s .= "\t}\n"; # set $s .= "\tset\n"; $s .= "\t{\n"; $s .= "\t\t$member_name = value;\n"; $s .= "\t}\n"; $s .= "} private $type $member_name;\n"; $s .= "#endregion //$property_name\n"; $s .= "\n"; output($s); } # # param is a value type, example: int int32 float ... # sub is_value_type($) { @values = qw(bool boolean byte sbyte char int16 int32 int64 uint16 uint32 uint64 int float single long double decimal); ($t)= @_; $t = uc($t); foreach $item( @values ) { if ( $t eq uc($item) ) { return 1; } } return 0; } # # # sub open_output_file() { open( $filehandle, ">output.cs") or die "open output file fail!"; return $filehandle; } # # # sub close_output_file() { close( $filehandle ); } # # # sub output($) { print $filehandle $s; } # # # sub get_property_name( $ ) { ($val) = @_; return ucfirst($val); } # # # sub get_member_name($) { ($val) = @_; $m = '_' . lcfirst($val); return $m; } # # main # sub main() { while(<>) { @list = split(" ", $_); if( @list>=2 ) { $type = $list[0]; $name = $list[1]; MakeProperty($type, $name); print "output property: $name\n"; } else { if( @list == 1) { $s = substr($list[0],0,1); if( $s eq 'q' || $s eq 'Q') { quit(); } } usage(); } } } # # # sub quit() { close_output_file(); copy_file_content(); exit; } # # # sub copy_file_content() { open( $filehandle, "output.cs" ) or die "open output.cs fail"; @array = <$filehandle>; foreach( @array ) { $lines = $lines . $_; } $CLIP = Win32::Clipboard(); $CLIP->Set($lines); close($filehandle); print "Already copy to clipboard.\n"; } # # main # open_output_file(); main(); quit();